예제 #1
0
        public async Task <bool> ConnectAsync(bool reconnect = false)
        {
            if (_session.AuthKey == null || reconnect)
            {
                var result = await Authenticator.DoAuthentication(_transport);

                _session.AuthKey    = result.AuthKey;
                _session.TimeOffset = result.TimeOffset;
            }

            _sender = new MtProtoSender(_transport, _session);

            //set-up layer
            var config  = new TLRequestGetConfig();
            var request = new TLRequestInitConnection()
            {
                ApiId         = _apiId,
                AppVersion    = "1.0.0",
                DeviceModel   = "PC",
                LangCode      = "en",
                Query         = config,
                SystemVersion = "Win 10.0"
            };
            var invokewithLayer = new TLRequestInvokeWithLayer()
            {
                Layer = 66, Query = request
            };
            await _sender.Send(invokewithLayer);

            await _sender.Receive(invokewithLayer);

            dcOptions = ((TLConfig)invokewithLayer.Response).DcOptions.ToList();

            return(true);
        }
예제 #2
0
        public async Task ConnectAsync(bool reconnect = false, CancellationToken token = default(CancellationToken))
        {
            token.ThrowIfCancellationRequested();

            if (session.AuthKey == null || reconnect)
            {
                var result = await Authenticator.DoAuthentication(transport, token).ConfigureAwait(false);

                session.AuthKey    = result.AuthKey;
                session.TimeOffset = result.TimeOffset;
            }

            sender = new MtProtoSender(transport, session);

            //set-up layer
            var config  = new TLRequestGetConfig();
            var request = new TLRequestInitConnection()
            {
                ApiId         = apiId,
                AppVersion    = "1.0.0",
                DeviceModel   = "PC",
                LangCode      = "en",
                Query         = config,
                SystemVersion = "Win 10.0"
            };
            var invokewithLayer = new TLRequestInvokeWithLayer()
            {
                Layer = 66, Query = request
            };
            await sender.Send(invokewithLayer, token).ConfigureAwait(false);

            await sender.Receive(invokewithLayer, token).ConfigureAwait(false);

            dcOptions = ((TLConfig)invokewithLayer.Response).DcOptions.ToList();
        }
예제 #3
0
        public async Task <bool> ConnectAsync(bool reconnect = false)
        {
            if (_session.AuthKey == null || reconnect)
            {
                var result = await Authenticator.DoAuthentication(_transport);

                _session.AuthKey    = result.AuthKey;
                _session.TimeOffset = result.TimeOffset;
            }

            _sender = new MtProtoSender(_transport, _session);

            //set-up layer
            var config  = new TLRequestGetConfig();
            var request = new TLRequestInitConnection()
            {
                api_id = _apiId, app_version = "1.0.0", device_model = "PC", lang_code = "en", query = config, system_version = "Win 10.0"
            };
            var invokewithLayer = new TLRequestInvokeWithLayer()
            {
                layer = 57, query = request
            };
            await _sender.Send(invokewithLayer);

            await _sender.Receive(invokewithLayer);

            dcOptions = ((TLConfig)invokewithLayer.Response).dc_options.lists;

            return(true);
        }
예제 #4
0
        /// <summary>
        /// Authenticate to Telegram
        /// </summary>
        /// <param name="reconnect"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public async Task AuthenticateAsync(
            TelegramAuthModel authModel,
            bool reconnect          = false,
            CancellationToken token = default)
        {
            if (authModel == null ||
                authModel.ApiId <= 0 ||
                string.IsNullOrWhiteSpace(authModel.ApiHash))
            {
                throw new ArgumentException($"Argument {nameof(authModel)} can't be null or contains empty properties. See https://core.telegram.org/api/obtaining_api_id");
            }

            token.ThrowIfCancellationRequested();

            if (this._session.AuthKey == null || reconnect)
            {
                Step3_Response result = await Authenticator.DoAuthentication(this.transport, token);

                this._session.AuthKey    = result.AuthKey;
                this._session.TimeOffset = result.TimeOffset;
            }

            this.sender = new MtProtoSender(this.transport, this._session);

            TLRequestGetConfig      config  = new TLRequestGetConfig();
            TLRequestInitConnection request = new TLRequestInitConnection()
            {
                ApiId         = apiId,
                AppVersion    = "1.0.0",
                DeviceModel   = "PC",
                LangCode      = "en",
                Query         = config,
                SystemVersion = "Win 10.0"
            };
            TLRequestInvokeWithLayer invokewithLayer = new TLRequestInvokeWithLayer()
            {
                Layer = 66,
                Query = request
            };

            await this.sender.Send(invokewithLayer, token);

            await this.sender.Receive(invokewithLayer, token);

            this.dcOptions = ((TLConfig)invokewithLayer.Response).DcOptions.ToList();
        }
예제 #5
0
        private async Task ConnectInternalAsync(bool reconnect = false, CancellationToken token = default(CancellationToken))
        {
            token.ThrowIfCancellationRequested();

            Session   = SessionFactory.TryLoadOrCreateNew(store, sessionUserId);
            transport = new TcpTransport(Session.DataCenter.Address, Session.DataCenter.Port, this.handler);

            if (Session.AuthKey == null || reconnect)
            {
                var result = await Authenticator.DoAuthentication(transport, token).ConfigureAwait(false);

                Session.AuthKey    = result.AuthKey;
                Session.TimeOffset = result.TimeOffset;
            }

            sender = new MtProtoSender(transport, store, Session);

            //set-up layer
            var config  = new TLRequestGetConfig();
            var request = new TLRequestInitConnection()
            {
                ApiId          = apiId,
                AppVersion     = "1.0.0",
                DeviceModel    = "PC",
                LangCode       = "en",
                Query          = config,
                SystemVersion  = "Win 10.0",
                SystemLangCode = "en",
                LangPack       = ""
            };
            var invokewithLayer = new TLRequestInvokeWithLayer()
            {
                Layer = 108, Query = request
            };
            await sender.Send(invokewithLayer, token).ConfigureAwait(false);

            await sender.Receive(invokewithLayer, token).ConfigureAwait(false);

            dcOptions = ((TLConfig)invokewithLayer.Response).DcOptions.ToList();
        }