예제 #1
0
        private static async Task FillSettings(IWindsorContainer container, IFactorySettings factorySettings)
        {
            Guard.That(factorySettings.AppId).IsPositive();
            Guard.That(factorySettings.AppHash).IsNotNullOrWhiteSpace();
            Guard.That(factorySettings.ServerAddress).IsNotNullOrWhiteSpace();
            Guard.That(factorySettings.ServerPublicKey).IsNotNullOrWhiteSpace();
            Guard.That(factorySettings.ServerPort).IsPositive();

            var settings = container.Resolve <IClientSettings>();

            settings.AppId     = factorySettings.AppId;
            settings.AppHash   = factorySettings.AppHash;
            settings.PublicKey = factorySettings.ServerPublicKey;

            settings.ApplicationProperties = factorySettings.Properties;
            settings.Socks5Proxy           = factorySettings.ProxyConfig;
            settings.UseIPv6 = factorySettings.UseIPv6;

            if (factorySettings.SessionStore != null)
            {
                container.Register(Component.For <ISessionStore>().Instance(factorySettings.SessionStore).IsDefault());
            }

            var sessionStore = container.Resolve <ISessionStore>();

            sessionStore.SetSessionTag(factorySettings.SessionTag);

            settings.ClientSession = await TryLoadOrCreateNew(sessionStore, factorySettings);
        }
예제 #2
0
        public static async Task <ITelegramClient> BuildClient(IFactorySettings factorySettings)
        {
            var container = RegisterDependency();

            await FillSettings(container, factorySettings).ConfigureAwait(false);

            return(container.Resolve <ITelegramClient>());
        }
예제 #3
0
        /// <summary>Build the client</summary>
        /// <param name="factorySettings">Settings</param>
        /// <returns>Client</returns>
        public static async Task <IClientApi> BuildClientAsync(IFactorySettings factorySettings)
        {
            var container = WindsorFactory.Create(typeof(INettyBootstrapper).GetTypeInfo().Assembly, typeof(IClientApi).GetTypeInfo().Assembly);

            await FillSettings(container, factorySettings);

            var bootstrapper = container.Resolve <INettyBootstrapper>();
            await bootstrapper.Init();

            return(container.Resolve <IClientApi>());
        }
예제 #4
0
        public async Task Init(IFactorySettings factorySettings)
        {
            _clientApi = await ClientFactory.BuildClientAsync(factorySettings).ConfigureAwait(false);

            _clientApi.UpdatesService.AutoReceiveUpdates += update =>
            {
                Console.WriteLine($"updates: {JsonConvert.SerializeObject(update)}");
            };

            if (_clientApi.AuthService.CurrentUserId.HasValue)
            {
                _clientApi.UpdatesService.StartReceiveUpdates(TimeSpan.FromSeconds(1));
            }
        }
예제 #5
0
        private static async Task FillSettings(IWindsorContainer container, IFactorySettings factorySettings)
        {
            Guard.That(factorySettings.Id).IsPositive();
            Guard.That(factorySettings.Hash).IsNotNullOrWhiteSpace();
            Guard.That(factorySettings.ServerAddress).IsNotNullOrWhiteSpace();
            Guard.That(factorySettings.ServerPort).IsPositive();

            var settings = container.Resolve <IClientSettings>();

            settings.AppId   = factorySettings.Id;
            settings.AppHash = factorySettings.Hash;

            container.Register(Component.For <ISessionStoreProvider>().Instance(factorySettings.StoreProvider));

            var sessionStore = container.Resolve <ISessionStore>();

            settings.Session = await TryLoadOrCreateNew(sessionStore, factorySettings).ConfigureAwait(false);
        }
예제 #6
0
        private static IClientSession TryLoadOrCreateNew(ISessionStore sessionStore, IFactorySettings factorySettings)
        {
            var newSession = new ClientSession();

            var sessionData = sessionStore.Load();

            if (sessionData != null)
            {
                newSession.FromBytes(sessionData);
            }
            else
            {
                newSession.ServerAddress = factorySettings.ServerAddress;
                newSession.Port          = factorySettings.ServerPort;
            }

            return(newSession);
        }
예제 #7
0
 public async Task Init(IFactorySettings factorySettings)
 {
     _clientApi = await ClientFactory.BuildClientAsync(factorySettings).ConfigureAwait(false);
 }
예제 #8
0
        private static async Task <ISession> TryLoadOrCreateNew(ISessionStore sessionStore, IFactorySettings factorySettings)
        {
            var session = await sessionStore.Load().ConfigureAwait(false) ?? Session.Create();

            session.ServerAddress = factorySettings.ServerAddress;
            session.Port          = factorySettings.ServerPort;

            return(session);
        }