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);
        }