public void ProcessMessage(SpRpcResult msg) { if (msg.ud != 0) { SkynetLogger.Error(Channel.NetDevice, "resp error code is: " + msg.ud); _eventManager.RemoveCallBack(msg.Session); return; } switch (msg.Op) { case SpRpcOp.Request: SkynetLogger.Info(Channel.NetDevice, "Recv Request : " + msg.Protocol.Name + ", session : " + msg.Session); Utils.Util.DumpObject(msg.Data); _eventManager.InvokeOnEvent(msg.Protocol.Name, msg.Data); break; case SpRpcOp.Response: if (msg.Protocol.Name != "heartbeat") { SkynetLogger.Info(Channel.NetDevice, "Recv Response : " + msg.Protocol.Name + ", session : " + msg.Session); Utils.Util.DumpObject(msg.Data); } _eventManager.InvokeCallBack(msg.Session, msg.Data); break; case SpRpcOp.Unknown: break; default: throw new ArgumentOutOfRangeException(); } }
private void TestFoo() { SpStream req = client.Request("foo", null, 2); Util.Assert(req.Length == 4); Util.Log("request foo size = " + req.Length); req.Position = 0; SpRpcResult dispatch_result = server.Dispatch(req); SpObject foobar_response = new SpObject(); foobar_response.Insert("ok", false); SpStream resp = server.Response(dispatch_result.Session, foobar_response); Util.Assert(resp.Length == 7); Util.Log("response package size = " + resp.Length); Util.Log("client dispatch"); resp.Position = 0; dispatch_result = client.Dispatch(resp); Util.Assert(dispatch_result.Arg["ok"].AsBoolean() == false); Util.DumpObject(dispatch_result.Arg); }
private void TestFoobar() { Util.Log("client request foobar"); SpObject foobar_request = new SpObject(); foobar_request.Insert("what", "foo"); SpStream req = client.Request("foobar", foobar_request, 1); Util.Assert(req.Length == 11); Util.Log("request foobar size = " + req.Length); req.Position = 0; SpRpcResult dispatch_result = server.Dispatch(req); Util.Assert(dispatch_result.Arg["what"].AsString().Equals("foo")); Util.DumpObject(dispatch_result.Arg); Util.Log("server response"); SpObject foobar_response = new SpObject(); foobar_response.Insert("ok", true); SpStream resp = server.Response(dispatch_result.Session, foobar_response); Util.Assert(resp.Length == 7); Util.Log("response package size = " + resp.Length); Util.Log("client dispatch"); resp.Position = 0; dispatch_result = client.Dispatch(resp); Util.Assert(dispatch_result.Arg["ok"].AsBoolean() == true); Util.DumpObject(dispatch_result.Arg); }
private void Receive(IAsyncResult asyncResult) { int receiveLength = mSocket.EndReceive(asyncResult); int read = 0; while (receiveLength > read) { if (read >= mReceiveBuffer.Length - 1) { break; } int size = (mReceiveBuffer[read] | mReceiveBuffer[read + 1] << 8); read += 2; if (receiveLength >= read + size) { SpStream spStream = new SpStream(mReceiveBuffer, read, size, size); SpRpcResult spResult = mRpc.Dispatch(spStream); mReceiveQueue.Enqueue(spResult); } read += size; } mSocket.BeginReceive(mReceiveBuffer, 0, mReceiveBuffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), this); }
public void ProcessMessage(SpRpcResult msg) { if (msg.ud != 0) { SkynetLogger.Error(Channel.Udp, "udp client resp error code is: " + msg.ud); return; } switch (msg.Op) { case SpRpcOp.Request: SkynetLogger.Info(Channel.Udp, "udp client recv Request : " + msg.Protocol.Name + ", session : " + msg.Session); Utils.Util.DumpObject(msg.Data); break; case SpRpcOp.Response: if (msg.Protocol.Name != "heartbeat") { SkynetLogger.Info(Channel.Udp, "udp client recv Response : " + msg.Protocol.Name + ", session : " + msg.Session); Utils.Util.DumpObject(msg.Data); } break; case SpRpcOp.Unknown: break; default: throw new ArgumentOutOfRangeException(); } }
public void Recv(IAsyncResult ar) { int ret = mSocket.EndReceive(ar); if (ret > 0) { mRecvOffset += ret; int read = 0; while (mRecvOffset > read) { int size = (mRecvBuffer[read + 1] | (mRecvBuffer[read + 0] << 8)); read += 2; if (mRecvOffset >= size + read) { SpStream stream = new SpStream(mRecvBuffer, read, size, size); SpRpcResult result = mRpc.Dispatch(stream); switch (result.Op) { case SpRpcOp.Request: Util.Log("Recv Request : " + result.Protocol.Name + ", session : " + result.Session); if (result.Arg != null) { Util.DumpObject(result.Arg); } break; case SpRpcOp.Response: Util.Log("Recv Response : " + result.Protocol.Name + ", session : " + result.Session); if (result.Arg != null) { Util.DumpObject(result.Arg); } break; } read += size; } } Util.Assert(mRecvOffset == read); mRecvOffset = 0; } mSocket.BeginReceive(mRecvBuffer, 0, mRecvBuffer.Length, SocketFlags.None, new System.AsyncCallback(ReadCallback), this); }