protected override IDuplexProtocolMessage TryParseDuplexMessage(StreamMessage message) { DuplexStreamMessage duplexMessage; return(DuplexStreamMessage.TryParse(message, protocol, out duplexMessage) ? duplexMessage : null); }
public static bool TryParse(StreamMessage message, StreamQbservableProtocol protocol, out DuplexStreamMessage duplexMessage) { Contract.Requires(message != null); Contract.Requires(protocol != null); Contract.Ensures(Contract.Result <bool>() == (Contract.ValueAtReturn(out duplexMessage) != null)); switch (message.Kind) { case QbservableProtocolMessageKind.DuplexInvoke: case QbservableProtocolMessageKind.DuplexResponse: case QbservableProtocolMessageKind.DuplexSubscribeResponse: case QbservableProtocolMessageKind.DuplexGetEnumeratorResponse: case QbservableProtocolMessageKind.DuplexEnumeratorResponse: case QbservableProtocolMessageKind.DuplexOnNext: // The following cases are handled the same as the above cases to ensure that extra data is read, though it's unexpected. case QbservableProtocolMessageKind.DuplexOnCompleted: case QbservableProtocolMessageKind.DuplexSubscribe: case QbservableProtocolMessageKind.DuplexDisposeSubscription: case QbservableProtocolMessageKind.DuplexGetEnumerator: case QbservableProtocolMessageKind.DuplexMoveNext: case QbservableProtocolMessageKind.DuplexResetEnumerator: case QbservableProtocolMessageKind.DuplexDisposeEnumerator: duplexMessage = new DuplexStreamMessage( message.Kind, BitConverter.ToInt64(message.Data, 0), protocol.Deserialize <object>(message.Data, offset: DuplexCallbackId.Size), message.Data, message.Length); return(true); case QbservableProtocolMessageKind.DuplexErrorResponse: case QbservableProtocolMessageKind.DuplexGetEnumeratorErrorResponse: case QbservableProtocolMessageKind.DuplexEnumeratorErrorResponse: case QbservableProtocolMessageKind.DuplexOnError: duplexMessage = new DuplexStreamMessage( message.Kind, BitConverter.ToInt64(message.Data, 0), ExceptionDispatchInfo.Capture(protocol.Deserialize <Exception>(message.Data, offset: DuplexCallbackId.Size)), message.Data, message.Length); return(true); default: duplexMessage = null; return(false); } }
protected override StreamMessage CreateResetEnumerator(DuplexCallbackId enumeratorId) => DuplexStreamMessage.CreateResetEnumerator(enumeratorId, protocol);
protected override StreamMessage CreateMoveNext(DuplexCallbackId enumeratorId) => DuplexStreamMessage.CreateMoveNext(enumeratorId, protocol);
protected override StreamMessage CreateInvoke(DuplexCallbackId clientId, object[] arguments) => DuplexStreamMessage.CreateInvoke(clientId, arguments, protocol);
protected override StreamMessage CreateDisposeSubscription(int subscriptionId) => DuplexStreamMessage.CreateDisposeSubscription(subscriptionId, protocol);
protected override StreamMessage CreateSubscribe(DuplexCallbackId clientId) => DuplexStreamMessage.CreateSubscribe(clientId, protocol);
protected override StreamMessage CreateDisposeEnumerator(int enumeratorId) => DuplexStreamMessage.CreateDisposeEnumerator(enumeratorId, protocol);
protected override StreamMessage CreateEnumeratorError(DuplexCallbackId id, ExceptionDispatchInfo error) => DuplexStreamMessage.CreateEnumeratorError(id, error, protocol);
protected override StreamMessage CreateGetEnumeratorResponse(DuplexCallbackId id, int clientEnumeratorId) => DuplexStreamMessage.CreateGetEnumeratorResponse(id, clientEnumeratorId, protocol);
protected override StreamMessage CreateEnumeratorResponse(DuplexCallbackId id, bool result, object current) => DuplexStreamMessage.CreateEnumeratorResponse(id, result, current, protocol);
protected override StreamMessage CreateOnCompleted(DuplexCallbackId id) => DuplexStreamMessage.CreateOnCompleted(id, protocol);
protected override StreamMessage CreateOnNext(DuplexCallbackId id, object value) => DuplexStreamMessage.CreateOnNext(id, value, protocol);
protected override StreamMessage CreateSubscribeResponse(DuplexCallbackId id, int clientSubscriptionId) => DuplexStreamMessage.CreateSubscribeResponse(id, clientSubscriptionId, protocol);
protected override StreamMessage CreateErrorResponse(DuplexCallbackId id, ExceptionDispatchInfo error) => DuplexStreamMessage.CreateErrorResponse(id, error, protocol);
protected override StreamMessage CreateResponse(DuplexCallbackId id, object result) => DuplexStreamMessage.CreateResponse(id, result, protocol);