public static async Task <QbservableProtocol> NegotiateServerAsync(Stream stream, IRemotingFormatter formatter, QbservableServiceOptions serviceOptions, CancellationToken cancel)
        {
            // TODO: Enable protocol registration and implement actual protocol negotiation

            var protocol = new DefaultQbservableProtocol(stream, formatter, serviceOptions, cancel);

            var buffer = new byte[4];

            await protocol.ReceiveAsync(buffer, 0, 4).ConfigureAwait(false);

            await protocol.SendAsync(buffer, 0, 4).ConfigureAwait(false);

            return(protocol);
        }
        public static async Task <QbservableProtocol> NegotiateClientAsync(Stream stream, IRemotingFormatter formatter, CancellationToken cancel)
        {
            // TODO: Enable protocol registration and implement actual protocol negotiation

            var protocol = new DefaultQbservableProtocol(stream, formatter, cancel);

            const int ping = 123;

            var buffer = BitConverter.GetBytes(ping);

            await protocol.SendAsync(buffer, 0, 4).ConfigureAwait(false);

            await protocol.ReceiveAsync(buffer, 0, 4).ConfigureAwait(false);

            Contract.Assume(BitConverter.ToInt32(buffer, 0) == ping);

            return(protocol);
        }
 public DefaultClientDuplexQbservableProtocolSink(DefaultQbservableProtocol protocol)
 {
     this.protocol = protocol;
 }
 public DefaultServerDuplexQbservableProtocolSink(DefaultQbservableProtocol protocol)
 {
     this.protocol = protocol;
 }
 public static DuplexQbservableMessage CreateEnumeratorError(DuplexCallbackId id, Exception error, DefaultQbservableProtocol protocol)
 {
     return(new DuplexQbservableMessage(QbservableProtocolMessageKind.DuplexEnumeratorErrorResponse, id, error, Serialize(id, error, protocol)));
 }
        public static DuplexQbservableMessage CreateEnumeratorResponse(DuplexCallbackId id, bool result, object current, DefaultQbservableProtocol protocol)
        {
            var value = Tuple.Create(result, current);

            return(new DuplexQbservableMessage(QbservableProtocolMessageKind.DuplexEnumeratorResponse, id, value, Serialize(id, value, protocol)));
        }
 public static DuplexQbservableMessage CreateGetEnumeratorResponse(DuplexCallbackId id, int clientEnumeratorId, DefaultQbservableProtocol protocol)
 {
     return(new DuplexQbservableMessage(QbservableProtocolMessageKind.DuplexGetEnumeratorResponse, id, clientEnumeratorId, Serialize(id, clientEnumeratorId, protocol)));
 }
 public static DuplexQbservableMessage CreateGetEnumerator(DuplexCallbackId id, DefaultQbservableProtocol protocol)
 {
     return(CreateWithoutValue(QbservableProtocolMessageKind.DuplexGetEnumerator, id, protocol));
 }