public IOCPRPCCall Execute(IOCPReaderWriter Context, IOCPRPCCall call) { //XmlSerializer ser = new XmlSerializer(call.GetType()); var ms = new MemoryStream(); //ser.Serialize(ms, call); Serialize(ms, call); // var msg = ASCIIEncoding.ASCII.GetString(ms.GetBuffer()); // SendMessage(msg); var buf = new byte[ms.Length]; //Buffer.BlockCopy(ms.GetBuffer(), 0, buf, 0, (int) ms.Length); ms.Position = 0; ms.Read(buf, 0, buf.Length); ms.Position = 0; /* * /// TEST CODE * DeSerialize(ms, call.GetType()); * ms.Position = 0; * // END TEST CODE */ Context.SendBuffer(buf); if (call.Response == (int)ResponseType.None) { call = GetResponse(call); if (call.Response == (int)ResponseType.Error) { var err = new StringBuilder(); err.AppendLine("RPC Error:"); foreach (var param in call.Params) { err.AppendLine(param.ToString()); } //throw new Exception(string.Format("RPC Error: {0}", call.Params[0])); throw new Exception(err.ToString()); } } else { call = null; } return(call); }