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); }
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(); }
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); }
/// <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(); }
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(); }