Ejemplo n.º 1
0
        protected override IDuplexProtocolMessage TryParseDuplexMessage(StreamMessage message)
        {
            DuplexStreamMessage duplexMessage;

            return(DuplexStreamMessage.TryParse(message, protocol, out duplexMessage)
           ? duplexMessage
           : null);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 protected override StreamMessage CreateResetEnumerator(DuplexCallbackId enumeratorId)
 => DuplexStreamMessage.CreateResetEnumerator(enumeratorId, protocol);
Ejemplo n.º 4
0
 protected override StreamMessage CreateMoveNext(DuplexCallbackId enumeratorId)
 => DuplexStreamMessage.CreateMoveNext(enumeratorId, protocol);
Ejemplo n.º 5
0
 protected override StreamMessage CreateInvoke(DuplexCallbackId clientId, object[] arguments)
 => DuplexStreamMessage.CreateInvoke(clientId, arguments, protocol);
Ejemplo n.º 6
0
 protected override StreamMessage CreateDisposeSubscription(int subscriptionId)
 => DuplexStreamMessage.CreateDisposeSubscription(subscriptionId, protocol);
Ejemplo n.º 7
0
 protected override StreamMessage CreateSubscribe(DuplexCallbackId clientId)
 => DuplexStreamMessage.CreateSubscribe(clientId, protocol);
Ejemplo n.º 8
0
 protected override StreamMessage CreateDisposeEnumerator(int enumeratorId)
 => DuplexStreamMessage.CreateDisposeEnumerator(enumeratorId, protocol);
Ejemplo n.º 9
0
 protected override StreamMessage CreateEnumeratorError(DuplexCallbackId id, ExceptionDispatchInfo error)
 => DuplexStreamMessage.CreateEnumeratorError(id, error, protocol);
Ejemplo n.º 10
0
 protected override StreamMessage CreateGetEnumeratorResponse(DuplexCallbackId id, int clientEnumeratorId)
 => DuplexStreamMessage.CreateGetEnumeratorResponse(id, clientEnumeratorId, protocol);
Ejemplo n.º 11
0
 protected override StreamMessage CreateEnumeratorResponse(DuplexCallbackId id, bool result, object current)
 => DuplexStreamMessage.CreateEnumeratorResponse(id, result, current, protocol);
Ejemplo n.º 12
0
 protected override StreamMessage CreateOnCompleted(DuplexCallbackId id)
 => DuplexStreamMessage.CreateOnCompleted(id, protocol);
Ejemplo n.º 13
0
 protected override StreamMessage CreateOnNext(DuplexCallbackId id, object value)
 => DuplexStreamMessage.CreateOnNext(id, value, protocol);
Ejemplo n.º 14
0
 protected override StreamMessage CreateSubscribeResponse(DuplexCallbackId id, int clientSubscriptionId)
 => DuplexStreamMessage.CreateSubscribeResponse(id, clientSubscriptionId, protocol);
Ejemplo n.º 15
0
 protected override StreamMessage CreateErrorResponse(DuplexCallbackId id, ExceptionDispatchInfo error)
 => DuplexStreamMessage.CreateErrorResponse(id, error, protocol);
Ejemplo n.º 16
0
 protected override StreamMessage CreateResponse(DuplexCallbackId id, object result)
 => DuplexStreamMessage.CreateResponse(id, result, protocol);