Example #1
0
 public TgConnectionPool(
     TgConnection mainConn,
     TgCallMiddlewareChain callMiddlewareChain,
     TcpClientConnectionHandler? connHandler = null
 ) {
     _conns[mainConn.Config.ThisDc] = mainConn;
     _callMiddlewareChain = callMiddlewareChain;
     _connHandler = connHandler;
 }
Example #2
0
        public static async Task <TelegramClient> Connect(
            Some <Session> session,
            ISessionStore store = null,
            TgCallMiddlewareChain callMiddlewareChain             = null,
            TcpClientConnectionHandler tcpClientConnectionHandler = null
            )
        {
            store = store ?? new FileSessionStore("session.dat");
            var connectInfo = ConnectInfo.FromSession(session);

            return(await Connect(connectInfo, store, callMiddlewareChain, tcpClientConnectionHandler));
        }
Example #3
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));
        }
Example #4
0
        public static async Task <TgBellhop> Connect(
            ConnectInfo connectInfo,
            TgCallMiddlewareChain callMiddlewareChain = null,
            TcpClientConnectionHandler connHandler    = null
            )
        {
            callMiddlewareChain = callMiddlewareChain ?? TgCallMiddlewareChain.Default;
            var conn = await TaskWrapper.Wrap(() =>
                                              TgConnectionEstablisher.EstablishConnection(connectInfo, callMiddlewareChain, connHandler)
                                              ).ConfigureAwait(false);

            var pool = new TgConnectionPool(conn, callMiddlewareChain, connHandler);

            return(new TgBellhop(pool, conn));
        }
Example #5
0
        static async Task <TelegramClient> Connect(
            ConnectInfo connectInfo,
            ISessionStore store,
            TgCallMiddlewareChain callMiddlewareChain             = null,
            TcpClientConnectionHandler tcpClientConnectionHandler = null
            )
        {
            var bellhop = await TgBellhop.Connect(
                connectInfo,
                callMiddlewareChain,
                tcpClientConnectionHandler
                ).ConfigureAwait(false);

            return(new TelegramClient(bellhop, store));
        }
Example #6
0
        public static async Task <TelegramClient> Connect(
            int apiId,
            ISessionStore store = null,
            IPEndPoint endpoint = null,
            TgCallMiddlewareChain callMiddlewareChain             = null,
            TcpClientConnectionHandler tcpClientConnectionHandler = null
            )
        {
            store = store ?? new FileSessionStore("session.dat");
            var ep          = endpoint ?? DefaultEndpoint;
            var connectInfo = (await store.Load().ConfigureAwait(false))
                              .Map(SomeExt.ToSome).Map(ConnectInfo.FromSession)
                              .IfNone(ConnectInfo.FromInfo(apiId, ep));

            return(await Connect(connectInfo, store, callMiddlewareChain, tcpClientConnectionHandler));
        }