示例#1
0
        private void Sent(ClientTcp socket, bool manualSerialization, bool debug, object objOriginal, string methodName, object[] methodParams)
        {
            using (MemoryStream memoryStream = new MemoryStream(1024))
            {
                using (BinaryWriter writer = new BinaryWriter(memoryStream))
                {
                    if (manualSerialization)
                    {
                        dataFlag = debug ? Code.CUSTOMSTREAMDEBUG : Code.CUSTOMSTREAM;

                        writer.Write(objOriginal.GetType().FullName);
                        writer.Write(methodName);
                        ((RpcSerializable)objOriginal).WriteMethodParams(writer, methodName, methodParams);
                    }
                    else
                    {
                        dataFlag = debug ? Code.BSONSTREAMDEBUG : Code.BSONSTREAM;

                        writer.Write(objOriginal.GetType().FullName);
                        writer.Write(methodName);

                        byte[] bsonData = BsonFormatter.Serialize(methodParams);
                        writer.Write(bsonData.Length);
                        writer.Write(bsonData);
                    }

                    writer.Flush();

                    byte[] headerSize = new byte[5];
                    headerSize[4] = dataFlag;
                    Array.Copy(BitConverter.GetBytes(memoryStream.Length), headerSize, 4);


                    byte[] sentStream = new byte[(int)memoryStream.Length + 5];
                    headerSize.CopyTo(sentStream, 0);
                    memoryStream.ToArray().CopyTo(sentStream, headerSize.Length);

                    socket.Sent(sentStream);
                }
            }
            //Debug.WriteLine(">> RpcClient Sent Data");
        }
示例#2
0
        private void Sent(BufferedStream stream, Object objReturn, CallRemotable call)
        {
            if (call.CustomSerialization)
            {
                if (call.Debug == null)
                {
                    using (MemoryStream memoryStream = new MemoryStream(bufferSize))
                    {
                        BinaryWriter writer = new BinaryWriter(memoryStream);
                        writer.Write(Code.CUSTOMSTREAM);

                        call.ObjLocal.GetType().GetMethod("WriteMethodReturn", WriteMethodReturnTypes).Invoke(call.ObjLocal, new object[] { writer, call.MethodName, objReturn });
                        writer.Flush();

                        Sent(stream, memoryStream);
                    }
                }
                else
                {
                    using (MemoryStream memoryStream = new MemoryStream(bufferSize))
                    {
                        BinaryWriter writer = new BinaryWriter(memoryStream);
                        writer.Write(Code.CUSTOMSTREAMDEBUG);
                        writer.Write(call.Debug.DownloadSize);
                        writer.Write(call.Debug.DonwloadTime);
                        writer.Write(call.Debug.ExecutionCpuTime);
                        call.ObjLocal.GetType().GetMethod("WriteMethodReturn", WriteMethodReturnTypes).Invoke(call.ObjLocal, new object[] { writer, call.MethodName, objReturn });
                        writer.Flush();

                        Sent(stream, memoryStream);
                    }
                }
            }
            else
            {
                if (call.Debug == null)
                {
                    using (MemoryStream memoryStream = new MemoryStream(bufferSize))
                    {
                        BinaryWriter writer = new BinaryWriter(memoryStream);
                        writer.Write(Code.BSONSTREAM);

                        byte[] bsonData = BsonFormatter.Serialize(objReturn);
                        writer.Write(bsonData.Length);
                        writer.Write(bsonData);
                        writer.Flush();

                        Sent(stream, memoryStream);
                    }
                }
                else
                {
                    using (MemoryStream memoryStream = new MemoryStream(bufferSize))
                    {
                        BinaryWriter writer = new BinaryWriter(memoryStream);
                        writer.Write(Code.BSONSTREAMDEBUG);
                        writer.Write(call.Debug.DownloadSize);
                        writer.Write(call.Debug.DonwloadTime);
                        writer.Write(call.Debug.ExecutionCpuTime);

                        byte[] bsonData = BsonFormatter.Serialize(objReturn);
                        writer.Write(bsonData.Length);
                        writer.Write(bsonData);
                        writer.Flush();

                        Sent(stream, memoryStream);
                    }
                }
            }
            //logger.Info(">> RpcTcpServer Sent Data");
        }