public AccountSessionHandler(SessionData sessionData, ILogger <AccountSessionHandler> logger, IChatsRepository chatsRepository, SubscriptionFactory subscriptionFactory)
        {
            _sessionData     = sessionData;
            _logger          = logger;
            _chatsRepository = chatsRepository;
            _subscription    = subscriptionFactory.Create();
            _sessionSubject  = new BehaviorSubject <SessionData>(sessionData);
            _subscription.Add(_sessionSubject);
            SessionChanges = _sessionSubject;
            _cancelSubject = new Subject <Unit>();
            _subscription.Add(_cancelSubject);

            _supportedMessages = new Dictionary <string, Func <IObservable <Unit> > >(StringComparer.OrdinalIgnoreCase)
            {
                { "/start", () => Observable.Empty <Unit>() },
                { "/stop", () => Observable.Empty <Unit>() },
                { "/help", () => ShowHelp() },
                { "/login", () => Login() },
                { "/username", () => RequestUsername() },
                { "/session", () => RequestSession() },
                { "/token", () => RequestAuthToken() },
                { "/cancel", () => Cancel() },
                { "/pause", () => StartPauseDialog() },
                { "/resume", () => Resume() },
                { "/mute", () => StartMuteDialog() },
                { "/unmute", () => Unmute() },
                { "/timezone", () => RequestTimezone() },
            };
        }
        private void SubscribeOnAccounts()
        {
            _subscriptions.Add(
                Messages.Where(m =>
                               m.Value.Message.NewChatMembers?.Any(cm => cm.Id == m.Key) == true ||
                               m.Value.Message.Text == "/start"
                               )
                .SelectAsync(m => AddChat(m.Key, m.Value.Message.Chat.Id))
                .Where(sessionData => sessionData != null)
                .SelectAsync(sessionData => sessionData.SessionCommunicator.SendMessage(StandardMessage.Started, true))
                .Subscribe()
                );

            _subscriptions.Add(
                Messages.Where(m => m.Value.Message.Text == "/stop")
                .SelectAsync(m => RemoveChat(m.Key, m.Value.Message.Chat.Id))
                .SelectAsync(sessionData => sessionData.SessionCommunicator.SendMessage(StandardMessage.Stopped, true))
                .Subscribe()
                );

            _subscriptions.Add(
                Messages.Where(m => m.Value.Message.LeftChatMember?.Id == m.Key)
                .Select(m => RemoveChat(m.Key, m.Value.Message.Chat.Id))
                .Subscribe()
                );
        }
示例#3
0
        /// <summary>
        /// Charge from users for chat app
        /// </summary>
        //[HttpPost]
        //public async Task<IHttpActionResult> Charge()
        //{
        //    //URL: http://localhost:2513/41440/v1/chat/charge
        //    IdeaMartStatusResponse statusResponse = new IdeaMartStatusResponse();
        //    Log.TraceStart();
        //    try
        //    {
        //        ChatAppDM dm = new ChatAppDM();
        //        var userList = dm.GetAllUserAddressList();

        //        foreach (var userAddress in userList)
        //        {
        //            var chargingResponse = await ChargeUser(userAddress);
        //        }

        //        statusResponse.requestId = "User Chat App";
        //        statusResponse.statusCode = Consts.SUCCESS;
        //        statusResponse.statusDetail = "Charging service successful for User Chat App.";
        //        statusResponse.timeStamp = DateTime.UtcNow.ToString();
        //        statusResponse.version = "1.0";
        //    }
        //    catch (Exception ex)
        //    {
        //        Log.Error(ex.ToString());
        //        return BadRequest();
        //    }
        //    Log.TraceEnd();

        //    return Ok(statusResponse);
        //}

        #endregion

        #region private methods

        private async Task <IdeaMartStatusResponseDto> RegisterUser(string userAddress)
        {
            //Log.TraceStart();
            try
            {
                //Subscribe User
                Subscription subscription = new Subscription();
                var          response     = await subscription.Add(_appId, _password, userAddress);

                if (response != null)
                {
                    ChatAppDM dm = new ChatAppDM();

                    if (response.statusCode == Consts.SUCCESS)//subscription successful
                    {
                        // var chargingResponse = await ChargeUser(userAddress);
                        //ChargeUser(userAddress);

                        //Generate code
                        string code = Common.GenerateCode(_codeLength);
                        while (dm.CodeExists(code))
                        {
                            code = Common.GenerateCode(_codeLength);
                        }

                        //Save in DB
                        var userId = dm.SubscribeUser(userAddress, code);

                        if (userId > 0)
                        {
                            var message = string.Format(Resources.Info_RegisterSuccess, code.ToUpper());
                            Sms.Send(userAddress, message);
                        }
                        else
                        {
                            Log.Error(string.Format(Resources.Error_UserSaveFailed, userAddress));
                        }
                    }
                    else if (response.statusCode == Consts.USER_ALREADY_REGISTERED)
                    {
                        string code = dm.GetUserCode(userAddress);

                        var message = string.Format(Resources.Info_UserAlreadyRegistered, code);
                        Sms.Send(userAddress, message);
                    }
                    else
                    {
                        var message = string.Format(response.statusDetail);
                        Sms.Send(userAddress, message);
                    }
                }
                //Log.TraceEnd();
                return(response);
            }
            catch (Exception ex)
            {
                Log.Error(ex.ToString());
                throw;
            }
        }
示例#4
0
        internal CardStateViewModel(CardState card)
        {
            this._card = card ?? throw new ArgumentNullException(nameof(card));
            Cid        = card.Cid;

            // Subscribe event handlers.
            Subscription.Add(Observable.FromEvent <PropertyChangedEventHandler, PropertyChangedEventArgs>
                             (
                                 handler => (sender, e) => handler(e),
                                 handler => card.PropertyChanged += handler,
                                 handler => card.PropertyChanged -= handler
                             )
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(e =>
            {
                switch (e.PropertyName)
                {
                case nameof(CardState.Capacity):
                    RaisePropertyChanged(nameof(FreeCapacity));
                    RaisePropertyChanged(nameof(TotalCapacity));
                    RaisePropertyChanged(nameof(UsedPercentage));
                    break;
                }
            }));
        }
示例#5
0
        public MainWindowViewModel()
        {
            Op = new Operator(this);

            // Add event listeners.
            if (!Designer.IsInDesignMode)             // AddListener source may be null in Design mode.
            {
                _fileListPropertyChangedListener = new PropertyChangedEventListener(FileListPropertyChanged);
                PropertyChangedEventManager.AddListener(FileListCore, _fileListPropertyChangedListener, string.Empty);

                _settingsPropertyChangedListener = new PropertyChangedEventListener(ReactSettingsPropertyChanged);
                PropertyChangedEventManager.AddListener(Settings.Current, _settingsPropertyChangedListener, string.Empty);

                _operatorPropertyChangedListener = new PropertyChangedEventListener(ReactOperatorPropertyChanged);
                PropertyChangedEventManager.AddListener(Op, _operatorPropertyChangedListener, string.Empty);
            }

            // Subscribe event handlers.
            Subscription.Add(Observable.FromEvent
                             (
                                 handler => _currentFrameSizeChanged += handler,
                                 handler => _currentFrameSizeChanged -= handler
                             )
                             .Throttle(TimeSpan.FromMilliseconds(50))
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ => SetCurrentImage()));

            Subscription.Add(Observable.FromEvent
                             (
                                 handler => _autoCheckIntervalChanged += handler,
                                 handler => _autoCheckIntervalChanged -= handler
                             )
                             .Throttle(TimeSpan.FromMilliseconds(200))
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ => Op.ResetAutoTimer()));

            Subscription.Add(Observable.FromEvent
                             (
                                 handler => _targetConditionChanged += handler,
                                 handler => _targetConditionChanged -= handler
                             )
                             .Throttle(TimeSpan.FromMilliseconds(200))
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ =>
            {
                FileListCoreView.Refresh();
                Op.UpdateProgress();
            }));

            Subscription.Add(Observable.FromEventPattern
                             (
                                 handler => Op.ActivateRequested += handler,
                                 handler => Op.ActivateRequested -= handler
                             )
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ => ActivateRequested?.Invoke(this, EventArgs.Empty)));

            SetSample(1);
        }
        public MaintananceHostedService(ILogger <MaintananceHostedService> logger, SubscriptionFactory subscriptionFactory)
        {
            _subscription = subscriptionFactory.Create();
            _logger       = logger;
            _httpClient   = new HttpClient();

            _subscription.Add(_httpClient);
        }
        public Task StartAsync(CancellationToken cancellationToken)
        {
            var timer = Observable.Interval(TimeSpan.FromMinutes(1)).StartWith(0);

            var subscription = timer.SelectAsync(async interval => await Ping()).Subscribe();

            _subscription.Add(subscription);

            return(Task.CompletedTask);
        }
        public TelegramAccountsHandler(SubscriptionFactory subscriptionFactory, IChatsRepository chatsRepository, BotClientFactory botClientFactory, MessageFactory messageFactory, MessageSender messageSender)
        {
            _subscriptions  = subscriptionFactory.Create();
            _sessionChanges = new Subject <SessionData>();
            _subscriptions.Add(_sessionChanges);

            _chatsRepository    = chatsRepository;
            _botClientFactory   = botClientFactory;
            _messageFactory     = messageFactory;
            this._messageSender = messageSender;
        }
示例#9
0
        private void AddPseudoSkusToSubscription(IList <int> pseudoSkusToAdd, Subscription subscription)
        {
            PseudoSku pseudoSku;

            if (pseudoSkusToAdd.Count() > 0)
            {
                foreach (int pseudoSkuId in pseudoSkusToAdd)
                {
                    pseudoSku = _pseudoSkuRepository.FindBy(pseudoSkuId);
                    subscription.Add(pseudoSku);
                }
            }
        }
示例#10
0
        internal void Initialize(MainWindowViewModel mainWindowViewModel)
        {
            this._mainWindowViewModel ??= mainWindowViewModel ?? throw new ArgumentNullException(nameof(mainWindowViewModel));

            // Subscribe event handlers.
            Subscription.Add(Observable.FromEvent <PropertyChangedEventHandler, PropertyChangedEventArgs>
                             (
                                 handler => (sender, e) => handler(e),
                                 handler => mainWindowViewModel.Op.Card.PropertyChanged += handler,
                                 handler => mainWindowViewModel.Op.Card.PropertyChanged -= handler
                             )
                             .Where(e =>
            {
                switch (e.PropertyName)
                {
                case nameof(CardState.FirmwareVersion):
                case nameof(CardState.Ssid):
                case nameof(CardState.Cid):
                    return(true);
                }
                return(false);
            })
                             .Throttle(TimeSpan.FromMilliseconds(100))
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ =>
            {
                RemoteCard = new CardStateViewModel(this._mainWindowViewModel.Op.Card);
            }));

            Subscription.Add(Observable.FromEvent <NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>
                             (
                                 handler => (sender, e) => handler(e),
                                 handler => LocalCards.CollectionChanged += handler,
                                 handler => LocalCards.CollectionChanged -= handler
                             )
                             .ObserveOn(SynchronizationContext.Current)
                             .Subscribe(_ =>
            {
                LocalCard ??= LocalCards.FirstOrDefault();
                RaisePropertyChanged(StaticPropertyChanged, nameof(LocalCardIsAvailable));
            }));

            LocalCard ??= LocalCards.FirstOrDefault();
        }
 public void Initialize()
 {
     _subscription.Add(
         StartHandleMessages().LogException(_logger).Subscribe()
         );
 }