public TgConnectionPool( TgConnection mainConn, TgCallMiddlewareChain callMiddlewareChain, TcpClientConnectionHandler? connHandler = null ) { _conns[mainConn.Config.ThisDc] = mainConn; _callMiddlewareChain = callMiddlewareChain; _connHandler = connHandler; }
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)); }
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)); }
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)); }
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)); }
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)); }