Esempio n. 1
0
 public void Dispose()
 {
     //if(timer != null) {
     //    timer.Stop();
     //}
     gateway.Dispose();
     gateway = null;
 }
Esempio n. 2
0
        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;
            }
        }