protected override async Task <Tuple <Expression, object> > ServerReceiveQueryAsync() { do { var message = await ReceiveMessageAsync().ConfigureAwait(false); object argument; if (message.Kind == QbservableProtocolMessageKind.Argument) { argument = Deserialize <object>(message.Data); message = await ReceiveMessageAsync().ConfigureAwait(false); } else { argument = null; } if (message.Kind == QbservableProtocolMessageKind.Subscribe) { var converter = new SerializableExpressionConverter(); return(Tuple.Create(converter.Convert(Deserialize <SerializableExpression>(message.Data)), argument)); } else if (ServerHandleClientShutDown(message)) { throw new OperationCanceledException(); } else if (!message.Handled) { throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Errors.ProtocolExpectedMessageSubscribeFormat, message.Kind)); } }while (true); }
protected override async Task ClientSendQueryAsync(Expression expression, object argument) { if (argument != null) { await SendMessageAsync(QbservableProtocolMessageKind.Argument, argument).ConfigureAwait(false); } var converter = new SerializableExpressionConverter(); await SendMessageAsync(QbservableProtocolMessageKind.Subscribe, converter.Convert(expression)).ConfigureAwait(false); }