示例#1
0
        public static async Task <TgConnection> EstablishConnection(
            ILogger logger,
            ConnectInfo connectInfo,
            TgCallMiddlewareChain callMiddlewareChain,
            TcpClientConnectionHandler?connHandler = null
            )
        {
            var endpoint = connectInfo.Endpoint;

            Helpers.Assert(endpoint != null, "endpoint == null");
            var tcpClient = await CreateTcpClient(endpoint !, connHandler).ConfigureAwait(false);

            var tcpTransport = new TcpTransport(tcpClient);

            if (connectInfo.NeedsInAuth)
            {
                var mtPlainTransport = new MtProtoPlainTransport(tcpTransport);
                var result           = await Authenticator.DoAuthentication(mtPlainTransport).ConfigureAwait(false);

                connectInfo.SetAuth(result);
            }

            var session           = connectInfo.ToSession().AsVar();
            var mtCipherTransport = new MtProtoCipherTransport(tcpTransport, session);
            var transport         = new TgCustomizedTransport(new TgTransport(logger, mtCipherTransport, session), callMiddlewareChain);

            // TODO: separate Config
            var config  = new GetConfig();
            var request = new InitConnection <GetConfig, Config>(
                apiId: session.Get().ApiId,
                appVersion: "1.0.0",
                deviceModel: "PC",
                langCode: "en",
                query: config,
                systemVersion: "Win 10.0",
                systemLangCode: "en",
                langPack: "tdesktop",
                proxy: null,
                @params: null
                );
            var invokeWithLayer = new InvokeWithLayer <InitConnection <GetConfig, Config>, Config>(
                layer: SchemeInfo.LayerVersion,
                query: request
                );
            var cfg = await transport.Call(invokeWithLayer).ConfigureAwait(false);

            DcInfoKeeper.Update(cfg);
            return(new TgConnection(session, transport, cfg));
        }
示例#2
0
 public TgConnection(Some <Var <Session> > session, Some <TgCustomizedTransport> transport, Some <Config> config)
 {
     Session   = session;
     Transport = transport;
     Config    = config;
 }
示例#3
0
 public TgConnection(Var <Session> session, TgCustomizedTransport transport, Config config)
 {
     Session   = session;
     Transport = transport;
     Config    = config;
 }