private bool HandleWriteStartBytes(IAsyncResult result) { this.connection.EndWrite(result); Stream stream = new StreamingConnectionHelper.StreamingOutputConnectionStream(this.connection, this.settings); Stream stream2 = new TimeoutStream(stream, ref this.timeoutHelper); this.encoder.WriteMessage(this.message, stream2); return(this.WriteEndBytes()); }
public async static Task WriteMessageAsync(Message message, IConnection connection, bool isRequest, IConnectionOrientedTransportFactorySettings settings, TimeoutHelper timeoutHelper) { byte[] endBytes = null; if (message != null) { MessageEncoder messageEncoder = settings.MessageEncoderFactory.Encoder; byte[] envelopeStartBytes = SingletonEncoder.EnvelopeStartBytes; bool writeStreamed; if (isRequest) { endBytes = SingletonEncoder.EnvelopeEndFramingEndBytes; writeStreamed = TransferModeHelper.IsRequestStreamed(settings.TransferMode); } else { endBytes = SingletonEncoder.EnvelopeEndBytes; writeStreamed = TransferModeHelper.IsResponseStreamed(settings.TransferMode); } if (writeStreamed) { await connection.WriteAsync(envelopeStartBytes, 0, envelopeStartBytes.Length, false, timeoutHelper.RemainingTime()); Stream connectionStream = new StreamingOutputConnectionStream(connection, settings); Stream writeTimeoutStream = new TimeoutStream(connectionStream, timeoutHelper.RemainingTime()); await messageEncoder.WriteMessageAsync(message, writeTimeoutStream); } else { ArraySegment <byte> messageData = await messageEncoder.WriteMessageAsync(message, int.MaxValue, settings.BufferManager, envelopeStartBytes.Length + IntEncoder.MaxEncodedSize); messageData = SingletonEncoder.EncodeMessageFrame(messageData); Buffer.BlockCopy(envelopeStartBytes, 0, messageData.Array, messageData.Offset - envelopeStartBytes.Length, envelopeStartBytes.Length); await connection.WriteAsync(messageData.Array, messageData.Offset - envelopeStartBytes.Length, messageData.Count + envelopeStartBytes.Length, true, timeoutHelper.RemainingTime()); } } else if (isRequest) // context handles response end bytes { endBytes = SingletonEncoder.EndBytes; } if (endBytes != null && endBytes.Length > 0) { await connection.WriteAsync(endBytes, 0, endBytes.Length, true, timeoutHelper.RemainingTime()); } }
public static void WriteMessage(Message message, IConnection connection, bool isRequest, IConnectionOrientedTransportFactorySettings settings, ref TimeoutHelper timeoutHelper) { byte[] envelopeEndFramingEndBytes = null; if (message != null) { bool flag; MessageEncoder encoder = settings.MessageEncoderFactory.Encoder; byte[] envelopeStartBytes = SingletonEncoder.EnvelopeStartBytes; if (isRequest) { envelopeEndFramingEndBytes = SingletonEncoder.EnvelopeEndFramingEndBytes; flag = TransferModeHelper.IsRequestStreamed(settings.TransferMode); } else { envelopeEndFramingEndBytes = SingletonEncoder.EnvelopeEndBytes; flag = TransferModeHelper.IsResponseStreamed(settings.TransferMode); } if (flag) { connection.Write(envelopeStartBytes, 0, envelopeStartBytes.Length, false, timeoutHelper.RemainingTime()); Stream stream = new StreamingOutputConnectionStream(connection, settings); Stream stream2 = new TimeoutStream(stream, ref timeoutHelper); encoder.WriteMessage(message, stream2); } else { ArraySegment <byte> segment = SingletonEncoder.EncodeMessageFrame(encoder.WriteMessage(message, 0x7fffffff, settings.BufferManager, envelopeStartBytes.Length + 5)); Buffer.BlockCopy(envelopeStartBytes, 0, segment.Array, segment.Offset - envelopeStartBytes.Length, envelopeStartBytes.Length); connection.Write(segment.Array, segment.Offset - envelopeStartBytes.Length, segment.Count + envelopeStartBytes.Length, true, timeoutHelper.RemainingTime(), settings.BufferManager); } } else if (isRequest) { envelopeEndFramingEndBytes = SingletonEncoder.EndBytes; } if (envelopeEndFramingEndBytes != null) { connection.Write(envelopeEndFramingEndBytes, 0, envelopeEndFramingEndBytes.Length, true, timeoutHelper.RemainingTime()); } }
public static void WriteMessage(Message message, IConnection connection, bool isRequest, IConnectionOrientedTransportFactorySettings settings, ref TimeoutHelper timeoutHelper) { byte[] envelopeEndFramingEndBytes = null; if (message != null) { bool flag; MessageEncoder encoder = settings.MessageEncoderFactory.Encoder; byte[] envelopeStartBytes = SingletonEncoder.EnvelopeStartBytes; if (isRequest) { envelopeEndFramingEndBytes = SingletonEncoder.EnvelopeEndFramingEndBytes; flag = TransferModeHelper.IsRequestStreamed(settings.TransferMode); } else { envelopeEndFramingEndBytes = SingletonEncoder.EnvelopeEndBytes; flag = TransferModeHelper.IsResponseStreamed(settings.TransferMode); } if (flag) { connection.Write(envelopeStartBytes, 0, envelopeStartBytes.Length, false, timeoutHelper.RemainingTime()); Stream stream = new StreamingOutputConnectionStream(connection, settings); Stream stream2 = new TimeoutStream(stream, ref timeoutHelper); encoder.WriteMessage(message, stream2); } else { ArraySegment<byte> segment = SingletonEncoder.EncodeMessageFrame(encoder.WriteMessage(message, 0x7fffffff, settings.BufferManager, envelopeStartBytes.Length + 5)); Buffer.BlockCopy(envelopeStartBytes, 0, segment.Array, segment.Offset - envelopeStartBytes.Length, envelopeStartBytes.Length); connection.Write(segment.Array, segment.Offset - envelopeStartBytes.Length, segment.Count + envelopeStartBytes.Length, true, timeoutHelper.RemainingTime(), settings.BufferManager); } } else if (isRequest) { envelopeEndFramingEndBytes = SingletonEncoder.EndBytes; } if (envelopeEndFramingEndBytes != null) { connection.Write(envelopeEndFramingEndBytes, 0, envelopeEndFramingEndBytes.Length, true, timeoutHelper.RemainingTime()); } }
public async static Task WriteMessageAsync(Message message, IConnection connection, bool isRequest, IConnectionOrientedTransportFactorySettings settings, TimeoutHelper timeoutHelper) { byte[] endBytes = null; if (message != null) { MessageEncoder messageEncoder = settings.MessageEncoderFactory.Encoder; byte[] envelopeStartBytes = SingletonEncoder.EnvelopeStartBytes; bool writeStreamed; if (isRequest) { endBytes = SingletonEncoder.EnvelopeEndFramingEndBytes; writeStreamed = TransferModeHelper.IsRequestStreamed(settings.TransferMode); } else { endBytes = SingletonEncoder.EnvelopeEndBytes; writeStreamed = TransferModeHelper.IsResponseStreamed(settings.TransferMode); } if (writeStreamed) { await connection.WriteAsync(envelopeStartBytes, 0, envelopeStartBytes.Length, false, timeoutHelper.RemainingTime()); Stream connectionStream = new StreamingOutputConnectionStream(connection, settings); Stream writeTimeoutStream = new TimeoutStream(connectionStream, timeoutHelper.RemainingTime()); await messageEncoder.WriteMessageAsync(message, writeTimeoutStream); } else { ArraySegment<byte> messageData = await messageEncoder.WriteMessageAsync(message, int.MaxValue, settings.BufferManager, envelopeStartBytes.Length + IntEncoder.MaxEncodedSize); messageData = SingletonEncoder.EncodeMessageFrame(messageData); Buffer.BlockCopy(envelopeStartBytes, 0, messageData.Array, messageData.Offset - envelopeStartBytes.Length, envelopeStartBytes.Length); await connection.WriteAsync(messageData.Array, messageData.Offset - envelopeStartBytes.Length, messageData.Count + envelopeStartBytes.Length, true, timeoutHelper.RemainingTime()); } } else if (isRequest) // context handles response end bytes { endBytes = SingletonEncoder.EndBytes; } if (endBytes != null && endBytes.Length > 0) { await connection.WriteAsync(endBytes, 0, endBytes.Length, true, timeoutHelper.RemainingTime()); } }
protected override void OnSendCore(Message message, TimeSpan timeout) { Fx.Assert(message != null, "message should not be null."); TimeoutHelper helper = new TimeoutHelper(timeout); WebSocketMessageType outgoingMessageType = GetWebSocketMessageType(message); if (IsStreamedOutput) { WebSocketStream webSocketStream = new WebSocketStream(WebSocket, outgoingMessageType, ((IDefaultCommunicationTimeouts)this).CloseTimeout); TimeoutStream timeoutStream = new TimeoutStream(webSocketStream, timeout); MessageEncoder.WriteMessage(message, timeoutStream); webSocketStream.WriteEndOfMessage(); } else { ArraySegment<byte> messageData = EncodeMessage(message); bool success = false; try { if (TD.WebSocketAsyncWriteStartIsEnabled()) { TD.WebSocketAsyncWriteStart( WebSocket.GetHashCode(), messageData.Count, RemoteAddress != null ? RemoteAddress.ToString() : string.Empty); } Task task = WebSocket.SendAsync(messageData, outgoingMessageType, true, helper.GetCancellationToken()); task.Wait(helper.RemainingTime(), WebSocketHelper.ThrowCorrectException, WebSocketHelper.SendOperation); if (TD.WebSocketAsyncWriteStopIsEnabled()) { TD.WebSocketAsyncWriteStop(_webSocket.GetHashCode()); } success = true; } finally { try { BufferManager.ReturnBuffer(messageData.Array); } catch (Exception ex) { if (Fx.IsFatal(ex) || success) { throw; } FxTrace.Exception.TraceUnhandledException(ex); } } } }
private bool HandleWriteStartBytes(IAsyncResult result) { this.connection.EndWrite(result); Stream stream = new StreamingConnectionHelper.StreamingOutputConnectionStream(this.connection, this.settings); Stream stream2 = new TimeoutStream(stream, ref this.timeoutHelper); this.encoder.WriteMessage(this.message, stream2); return this.WriteEndBytes(); }