Beispiel #1
0
        public override Task <QbservableMessage> ReceivingAsync(QbservableMessage message, CancellationToken cancel)
        {
            DuplexQbservableMessage duplexMessage;

            if (DuplexQbservableMessage.TryParse(message, protocol, out duplexMessage))
            {
                message = duplexMessage;

                switch (duplexMessage.Kind)
                {
                case QbservableProtocolMessageKind.DuplexResponse:
                    HandleResponse(duplexMessage.Id, duplexMessage.Value);
                    break;

                case QbservableProtocolMessageKind.DuplexErrorResponse:
                    HandleErrorResponse(duplexMessage.Id, duplexMessage.Error);
                    break;

                case QbservableProtocolMessageKind.DuplexSubscribeResponse:
                    HandleSubscribeResponse(duplexMessage.Id, (int)duplexMessage.Value);
                    break;

                case QbservableProtocolMessageKind.DuplexGetEnumeratorResponse:
                    HandleGetEnumeratorResponse(duplexMessage.Id, (int)duplexMessage.Value);
                    break;

                case QbservableProtocolMessageKind.DuplexGetEnumeratorErrorResponse:
                    HandleGetEnumeratorErrorResponse(duplexMessage.Id, duplexMessage.Error);
                    break;

                case QbservableProtocolMessageKind.DuplexEnumeratorResponse:
                    HandleEnumeratorResponse(duplexMessage.Id, (Tuple <bool, object>)duplexMessage.Value);
                    break;

                case QbservableProtocolMessageKind.DuplexEnumeratorErrorResponse:
                    HandleEnumeratorErrorResponse(duplexMessage.Id, duplexMessage.Error);
                    break;

                case QbservableProtocolMessageKind.DuplexOnNext:
                    HandleOnNext(duplexMessage.Id, duplexMessage.Value);
                    break;

                case QbservableProtocolMessageKind.DuplexOnCompleted:
                    HandleOnCompleted(duplexMessage.Id);
                    break;

                case QbservableProtocolMessageKind.DuplexOnError:
                    HandleOnError(duplexMessage.Id, duplexMessage.Error);
                    break;

                default:
                    throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Errors.ProtocolUnknownMessageKindFormat, duplexMessage.Kind));
                }

                duplexMessage.Handled = true;
            }

            return(Task.FromResult(message));
        }
Beispiel #2
0
        public override Task <QbservableMessage> ReceivingAsync(QbservableMessage message, CancellationToken cancel)
        {
            DuplexQbservableMessage duplexMessage;

            if (DuplexQbservableMessage.TryParse(message, protocol, out duplexMessage))
            {
                message = duplexMessage;

                switch (duplexMessage.Kind)
                {
                case QbservableProtocolMessageKind.DuplexInvoke:
                    Invoke(duplexMessage.Id, (object[])duplexMessage.Value);
                    break;

                case QbservableProtocolMessageKind.DuplexSubscribe:
                    Subscribe(duplexMessage.Id);
                    break;

                case QbservableProtocolMessageKind.DuplexDisposeSubscription:
                    DisposeSubscription(duplexMessage.Id.ClientId);
                    break;

                case QbservableProtocolMessageKind.DuplexGetEnumerator:
                    GetEnumerator(duplexMessage.Id);
                    break;

                case QbservableProtocolMessageKind.DuplexMoveNext:
                    MoveNext(duplexMessage.Id);
                    break;

                case QbservableProtocolMessageKind.DuplexResetEnumerator:
                    ResetEnumerator(duplexMessage.Id);
                    break;

                case QbservableProtocolMessageKind.DuplexDisposeEnumerator:
                    DisposeEnumerator(duplexMessage.Id.ClientId);
                    break;

                default:
                    throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Errors.ProtocolUnknownMessageKindFormat, duplexMessage.Kind));
                }

                duplexMessage.Handled = true;
            }

            return(Task.FromResult(message));
        }