public void Dispose() { //if(timer != null) { // timer.Stop(); //} gateway.Dispose(); gateway = null; }
public async Task ConnectAsync() { try { logger.info("mtptoto gateway connect async"); if (dc.AuthKey == null) { dc.AuthKey = await new Authenticator().Generate(dc, 5); } config = null; //await gateway.ConnectAsync(dc, -1); if (gateway != null) { logger.debug("disposing old gateway"); gateway.Dispose(); } // creating new gateway, start task to connect gateway = new TransportGatewayAsync(dc); gateway.InputEvent += GatewayOnInput; gateway.ConnectedEvent += async delegate { foreach (var runningRequest in runningRequests.Values) { runningRequest.Dirty = true; } await Submit(null); }; Task.Run(() => gateway.Run()); DelayTask(); if (highlevel) { /* * while(true) { * try { * MTProtoInitRequest initRequest = new MTProtoInitRequest(); * await Submit(initRequest); * config = await initRequest.Task; * break; * } catch(MTProtoBadMessageException e) { * throw new MTProtoBrokenSessionException(); * } catch(Exception e) { * logger.info("init connection failed: {0}", e); * } * * await Task.Delay(TimeSpan.FromSeconds(2)); * }*/ // it's highlevel mtproto gateway, sending init request byte[] requestBytes; MTProtoInitRequest request = new MTProtoInitRequest(); using (MemoryStream memory = new MemoryStream()) using (BinaryWriter writer = new BinaryWriter(memory)) { request.OnSend(writer); requestBytes = memory.ToArray(); } config = await Call <Config>(requestBytes); if (config == null) { logger.debug("failed to get config"); throw new MTProtoInitException(); } gateway.ConnectedEvent += () => ReconnectEvent(); } logger.info("connection established, config: {0}", config); } catch (Exception ex) { logger.error("mtproto gateway connect async exception {0}", ex); throw ex; } }