1 module kissrpc.RpcClientSocket;
2 
3 import kissrpc.RpcRecvPackageManage;
4 import kissrpc.RpcEventInterface;
5 import kissrpc.RpcSocketBaseInterface;
6 import kissrpc.Unit;
7 import kissrpc.Logs;
8 
9 // import kiss.aio.AsyncTcpBase;
10 // import kiss.event.Poll;
11 // import kiss.time.Timer;
12 // import kiss.aio.AsyncTcpClient;
13 
14 import std.stdio;
15 import std.socket;
16 import std.conv;
17 
18 import core.thread;
19 
20 
21 import kiss.aio.AsynchronousChannelSelector;
22 import kiss.aio.ByteBuffer;
23 import kiss.net.TcpClient;
24 
25 class RpcClientSocket: TcpClient, RpcSocketBaseInterface
26 {
27 public:
28 	this(string ip, ushort port, AsynchronousChannelSelector sel, RpcEventInterface rpcEventDelegate) {
29 		super(ip, port, sel, RPC_PACKAGE_MAX);
30 		_packageManage = new RpcRecvPackageManage(this, rpcEventDelegate);
31 		_socketEventDelegate = rpcEventDelegate;
32 	}
33 	bool write(byte[] buf) {
34 		// writeln("write index ",index++);
35 		super.doWrite(buf);
36 		return true;
37 	}
38 	override void onConnectCompleted(void* attachment) {
39 		doRead();
40 		_socketEventDelegate.socketEvent(this, SOCKET_STATUS.SE_CONNECTD, "connect to server is ok!");
41 	}
42     override void onConnectFailed(void* attachment) {
43 		//writeln("onConnectFailed");
44 	}
45     override void onWriteCompleted(void* attachment, size_t count , ByteBuffer buffer) {
46 		// writeln("write success index ",index);
47 	}
48 	override void onWriteFailed(void* attachment) {
49 		//writeln("onWriteFailed");
50 		_socketEventDelegate.socketEvent(this, SOCKET_STATUS.SE_WRITE_FAILED, "write data to server is failed");
51 	}
52     override void onReadCompleted(void* attachment, size_t count , ByteBuffer buffer) {
53 
54 		_packageManage.add(cast(ubyte[])(buffer.getCurBuffer()));
55 		_readBuffer.clear();
56 	}
57 	override void onReadFailed(void* attachment) {
58 		//writeln("onReadFailed");
59 	}
60 	override void onClose() {
61 		_socketEventDelegate.socketEvent(this, SOCKET_STATUS.SE_DISCONNECTD, "disconnect from server!");
62 	}
63 	override void reConnect() {
64 		//writeln("RpcClientSocket reConnect");
65 		super.reConnect();
66 	}
67 
68 	void disconnect()
69 	{
70 		close();	
71 	}
72 	int getFd() { return cast(int)(fd()); }
73 	string getIp() { return ip(); }
74 	string getPort() { return port(); }
75 
76 
77 private:
78 	RpcEventInterface _socketEventDelegate;
79 	RpcRecvPackageManage _packageManage;
80 	long index = 1;
81 }
82