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