public void Send(Message message) { if (_bufferManager == null) { byte[] body; #if VERBOSE DebugHelper.Start(); #endif using (MemoryStream str = new MemoryStream()) { _encoder.WriteMessage(message, str); body = str.ToArray(); } #if VERBOSE DebugHelper.Stop(" #### Message.Serialize {{\n\tAction={2}, \n\tBytes={1}, \n\tTime={0}ms}}.", body.Length, message.Headers.Action); #endif byte[] lengthBytes = BitConverter.GetBytes(body.Length); #if VERBOSE DebugHelper.Start(); #endif _socket.SendMore(lengthBytes); _socket.Send(body); #if VERBOSE DebugHelper.Stop(" #### Message.Publish {{\n\tAction={2}, \n\tBytes={1}, \n\tTime={0}ms}}.", body.Length, message.Headers.Action); #endif } else { #if VERBOSE DebugHelper.Start(); #endif ArraySegment <byte> body = _encoder.WriteMessage(message, 100 * 1024 * 1024, _bufferManager); #if VERBOSE DebugHelper.Stop(" #### Message.Serialize {{\n\tAction={2}, \n\tBytes={1}, \n\tTime={0}ms}}.", body.Count, message.Headers.Action); #endif try { byte[] lengthBytes = BitConverter.GetBytes(body.Count); #if VERBOSE DebugHelper.Start(); #endif _socket.SendMore(lengthBytes); _socket.Send(body.Array, body.Offset, body.Count); #if VERBOSE DebugHelper.Stop(" #### Message.Publish {{\n\tAction={2}, \n\tBytes={1}, \n\tTime={0}ms}}.", body.Count, message.Headers.Action); #endif } finally { _bufferManager.ReturnBuffer(body.Array); } } }
public Message Receive(TimeSpan timeout) { byte[] bytes; int length; try { #if VERBOSE DebugHelper.Start(); #endif byte[] lengthBytes = _socket.Recv(); length = BitConverter.ToInt32(lengthBytes, 0); if (_bufferManager == null) { bytes = _socket.Recv(); } else { bytes = _bufferManager.TakeBuffer(length); _socket.Recv(bytes, out length); } #if VERBOSE DebugHelper.Stop(" #### Message.Receive {{\n\tBytes={1}, \n\tTime={0}ms}}.", length); #endif } catch { return(null); } if (bytes == null) { return(null); } Message message; #if VERBOSE DebugHelper.Start(); #endif if (_bufferManager == null) { message = ConstructMessage(bytes); } else { message = ConstructMessage(new ArraySegment <byte>(bytes, 0, length), _bufferManager); } message.Headers.To = LocalAddress.Uri; #if VERBOSE DebugHelper.Stop( " #### Message.DeSerialize {{\n\tAction={3}, \n\tBytes={2}, \n\tNow={1:HH-mm-ss:fff}ms, \n\tTime={0}ms}}.", DateTime.Now, length, message.Headers.Action); #endif return(message); }