public MTProtoClientConnection(
            [NotNull] IClientTransportConfig clientTransportConfig,
            [NotNull] IClientTransportFactory clientTransportFactory,
            [NotNull] TLRig tlRig,
            [NotNull] IMessageIdGenerator messageIdGenerator,
            [NotNull] IMessageCodec messageCodec)
        {
            Argument.IsNotNull(() => clientTransportConfig);
            Argument.IsNotNull(() => clientTransportFactory);
            Argument.IsNotNull(() => tlRig);
            Argument.IsNotNull(() => messageIdGenerator);
            Argument.IsNotNull(() => messageCodec);

            _tlRig = tlRig;
            _messageIdGenerator = messageIdGenerator;
            _messageCodec       = messageCodec;

            DefaultRpcTimeout     = Defaults.RpcTimeout;
            DefaultConnectTimeout = Defaults.ConnectTimeout;

            _methods = new MTProtoAsyncMethods(this);

            InitResponseDispatcher(_responseDispatcher);

            // Init transport.
            _clientTransport = clientTransportFactory.CreateTransport(clientTransportConfig);

            // Connector in/out.
            _clientTransport.ObserveOn(DefaultScheduler.Instance).Do(bytes => LogMessageInOut(bytes, "IN")).Subscribe(ProcessIncomingMessageBytes);
        }
Example #2
0
        public MTProtoClientConnection(
            [NotNull] IClientTransportConfig clientTransportConfig,
            [NotNull] IClientTransportFactory clientTransportFactory,
            [NotNull] TLRig tlRig,
            [NotNull] IMessageIdGenerator messageIdGenerator,
            [NotNull] IMessageCodec messageCodec)
        {
            _tlRig = tlRig;
            _messageIdGenerator = messageIdGenerator;
            _messageCodec       = messageCodec;

            DefaultRpcTimeout     = Defaults.RpcTimeout;
            DefaultConnectTimeout = Defaults.ConnectTimeout;

            _methods = new MTProtoAsyncMethods(this);

            _updatesHandler = new UpdatesHandler(_tlRig);

            InitResponseDispatcher(_responseDispatcher);

            // Init transport.
            _clientTransport = clientTransportFactory.CreateTransport(clientTransportConfig);

            // Connector in/out.
            _clientTransport.ObserveOn(DefaultScheduler.Instance).Do(bytes => LogMessageInOut(bytes, "IN")).Subscribe(ProcessIncomingMessageBytes);

            _clientTransport.RegisterOnDisconnectInternally(() =>
            {
                Console.WriteLine("Client has been closed internally.");

                if (_onClosedInternally != null)
                {
                    _onClosedInternally(this, null);
                }

                if (_state == MTProtoConnectionState.Disconnected)

                {
                    return;
                }
                _state = MTProtoConnectionState.Disconnected;

                if (_connectionCts != null)
                {
                    _connectionCts.Cancel();
                    _connectionCts.Dispose();
                    _connectionCts = null;
                }
            });
        }