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