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 <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); }
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> Connect(bool reconnect = false) { if (_transport == null) { _transport = new TcpTransport(_session.ServerAddress, _session.Port); } if (_session.AuthKey == null || reconnect) { var result = await Authenticator.DoAuthentication(_transport); _session.AuthKey = result.AuthKey; _session.TimeOffset = result.TimeOffset; } _sender = new MtProtoSender(_transport, _session); if (!reconnect) { var request = new InitConnectionRequest(_apiId); await _sender.Send(request); await _sender.Recieve(request); dcOptions = request.ConfigConstructor.dc_options; _session.CurrentDcId = request.ConfigConstructor.this_dc; } return(true); }
public async Task <bool> Connect(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); if (!reconnect) { var request = new TL.InvokeWithLayerRequest(config.currentLayer, new TL.InitConnectionRequest(config.apiId, config.DeviceModel, config.SystemVersion, config.AppVersion, config.LangCode, new TL.HelpGetConfigRequest())); await _sender.Send(request); await _sender.Receive(request); var result = (TL.ConfigType)request.Result; dcOptions = result.DcOptions; } return(true); }
private async Task ReconnectImpl() { await CloseProto(); Debug.WriteLine("Creating new transport.."); if (session.authKey == null) { var result = await Authenticator.Authenticate(session.serverAddress, session.port); session.authKey = result.authKey; session.timeOffset = result.timeOffset; session.salt = result.serverSalt; } protoSender = new MtProtoSender(session); Subscribe(); protoSender.Start(); var request = new InitConnectionAndGetConfigRequest(apiLayer, apiId, deviceInfo); await SendRpcRequest(request); configuration = request.config; dcOptions = new DcOptionsCollection(request.config.dcOptions); OnConnectionStateChanged(ConnectionStateEventArgs.Connected()); }
private async Task ReconnectImpl() { await CloseProto(); Debug.WriteLine("Creating new transport.."); if (ClientSettings.Session.AuthKey == null) { Step3_Response result = await Authenticator.Authenticate(ClientSettings.Session.ServerAddress, ClientSettings.Session.Port); ClientSettings.Session.AuthKey = result.authKey; ClientSettings.Session.TimeOffset = result.timeOffset; ClientSettings.Session.Salt = result.serverSalt; } _protoSender = new MtProtoSender(ClientSettings.Session); Subscribe(); _protoSender.Start(); var request = new InitConnectionAndGetConfigRequest(s_apiLayer, ClientSettings.AppId, _deviceInfo); await SendRpcRequest(request); _configuration = request.config; _dcOptions = new DcOptionsCollection(request.config.dcOptions); OnConnectionStateChanged(ConnectionStateEventArgs.Connected()); }
public void Dispose() { if (_transport != null) { _transport.Dispose(); _transport = null; } _sender = null; dcOptions = null; }
/// <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 <MtProtoSender> CreateProto(Session protoSession) { Debug.WriteLine("Creating new transport.."); if (protoSession.authKey == null) { var authResult = await Authenticator.Authenticate(protoSession.serverAddress, protoSession.port); protoSession.authKey = authResult.authKey; protoSession.timeOffset = authResult.timeOffset; protoSession.salt = authResult.serverSalt; } var proto = new MtProtoSender(protoSession, true); var initRequest = new InitConnectionAndGetConfigRequest(apiLayer, apiId, deviceInfo); await proto.Send(initRequest); return(proto); }
public async Task <bool> Connect() { if (_session.AuthKey == null) { var result = await Authenticator.DoAuthentication(_transport); _session.AuthKey = result.AuthKey; _session.TimeOffset = result.TimeOffset; } _sender = new MtProtoSender(_transport, _session); var request = new InitConnectionRequest(Values.ApiID); await _sender.Send(request); await _sender.Recieve(request); return(IsUserAuthorized()); }
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(); }