1 module kissrpc.RpcServerSocket; 2 3 import kissrpc.RpcRecvPackageManage; 4 import kissrpc.RpcEventInterface; 5 import kissrpc.RpcSocketBaseInterface; 6 import kissrpc.Unit; 7 8 import std.socket; 9 import std.stdio; 10 import std.conv; 11 import core.thread; 12 13 14 import kiss.net.TcpServer; 15 import kiss.aio.AsynchronousSocketChannel; 16 import kiss.aio.ByteBuffer; 17 18 class RpcServerSocket:TcpServer, RpcSocketBaseInterface{ 19 20 public: 21 this(AsynchronousSocketChannel client, RpcEventInterface rpcEventDalegate) 22 { 23 _socketEventDelegate = rpcEventDalegate; 24 _packageManage = new RpcRecvPackageManage(this, rpcEventDalegate); 25 super(client, RPC_PACKAGE_MAX); 26 _socketEventDelegate.socketEvent(this, SOCKET_STATUS.SE_CONNECTD, "client inconming...."); 27 } 28 override void onWriteCompleted(void* attachment, size_t count , ByteBuffer buffer) { 29 30 } 31 override void onWriteFailed(void* attachment) { 32 33 _socketEventDelegate.socketEvent(this, SOCKET_STATUS.SE_WRITE_FAILED, "write data to client is failed"); 34 } 35 override void onReadCompleted(void* attachment, size_t count , ByteBuffer buffer) { 36 _packageManage.add(cast(ubyte[])(buffer.getCurBuffer())); 37 _readBuffer.clear(); 38 } 39 override void onReadFailed(void* attachment) { 40 41 } 42 override void onClose() { 43 _socketEventDelegate.socketEvent(this, SOCKET_STATUS.SE_DISCONNECTD, "disconnect from client!"); 44 } 45 46 void disconnect() 47 { 48 close(); 49 } 50 bool write(byte[] buf) { 51 super.doWrite(buf); 52 return true; 53 } 54 55 int getFd() { return cast(int)(fd()); } 56 string getIp() { return ip(); } 57 string getPort() { return port(); } 58 59 private: 60 RpcEventInterface _socketEventDelegate; 61 RpcRecvPackageManage _packageManage; 62 } 63