public StatsService(ILogger logger, SettingsWrapper settingsWrapper, WatcherService watcherService,
                            ApiService apiService, SocketIoService socketIoService)
        {
            _logger          = logger;
            _apiService      = apiService;
            _settingsWrapper = settingsWrapper;
            _socketIoService = socketIoService;

            _statsStatusChangedSubject = new BehaviorSubject <StatsStatus>(StatsStatus.Waiting);
            _statsSubject = new BehaviorSubject <List <DisplayPlayerStats> >(null);

            watcherService.MatchFound.Where(path => path != null)
            .Subscribe(path => { Task.Run(async() => { await StatsFound(path); }); });

            socketIoService.Hub.OnPlayersRequested.SelectMany(_statsSubject).Subscribe(players =>
            {
                try
                {
                    socketIoService.Hub.SendColorKeys(players.Select(p => p.GetColorKeys()).ToList());
                    socketIoService.Hub.SendPlayers(players.Select(p => p.ToMobile()).ToList());
                }
                catch (Exception e)
                {
                    _logger.Error("Error trying to convert stats to mobile version", e);
                }
            });
        }
Esempio n. 2
0
        public SettingsWrapper(ILogger logger, SocketIoService socketIoService)
        {
            _logger          = logger;
            _socketIoService = socketIoService;

            Init();

            socketIoService.Hub.OnSettingsRequested.Subscribe(_ => { SettingsRequested(); });

            _saveQueueSubject = new Subject <object>();

            _saveQueueSubject.Throttle(TimeSpan.FromSeconds(10)).Subscribe(async _ => { await InternalSaveAsync(); });

            SettingChangedSubject = new Subject <ChangedSetting>();
            SettingChangedSubject.Where(setting => setting?.Key != null && setting.HasChanged)
            .Do(setting =>
                _logger.Info($"Setting ({setting.Key}) changed from '{setting.OldValue}' to '{setting.NewValue}'"))
            .Throttle(TimeSpan.FromSeconds(2))
            .Subscribe(key => Save());

            _uiSettingsChangedSubject = new Subject <ChangedSetting>();

            var uiSettingsChangedInternal = SettingChanged("UISetting")
                                            .Throttle(TimeSpan.FromMilliseconds(500));

            uiSettingsChangedInternal.Subscribe(changedSetting =>
            {
                SetBrushes();
                SettingsRequested();
                _uiSettingsChangedSubject.OnNext(changedSetting);
            });
            SetBrushes();
        }
Esempio n. 3
0
        public HeaderViewModel(ILogger logger, SocketIoService socketIoService, StatsService statsService,
                               SettingsWrapper settingsWrapper)
        {
            _logger          = logger;
            _settingsWrapper = settingsWrapper;

            OpenWebsiteCommand  = new RelayCommand(LogoClick);
            SettingsCommand     = new RelayCommand(SettingsClick);
            QrCodeClickCommand  = new RelayCommand(QrCodeClick);
            ExportStatsCommand  = new RelayCommand(async _ => await ExportStatsAsync());
            EnableReplayCommand = new RelayCommand(EnableReplays);
            SwitchThemeCommand  = new RelayCommand(SwitchTheme);

            socketIoService.StateChanged.Subscribe(state => { ConnectionState = state.ToString(); });
            statsService.StatsStatusChanged.Subscribe(status => { CanExport = status == StatsStatus.Fetched; });

            _settingsWrapper.SettingChanged(nameof(SettingsJson.InstallDirectory)).Subscribe(s =>
            {
                var path         = Path.Combine(_settingsWrapper.CurrentSettings.InstallDirectory, "preferences.xml");
                CanEnableReplays = File.Exists(path);
            });

            if (_settingsWrapper.CurrentSettings.DarkMode)
            {
                SwitchTheme();
            }
        }
Esempio n. 4
0
        public QrCodeViewModel(SocketIoService socketIoService, SettingsWrapper settingsWrapper)
        {
            // uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
            GenerateCommand = new RelayCommand(() => Generate());

            _socketIoService = socketIoService;

            if (string.IsNullOrEmpty(settingsWrapper.CurrentSettings.Token))
            {
                settingsWrapper.CurrentSettings.Token = Guid.NewGuid().ToString();
            }
            Generate(settingsWrapper.CurrentSettings.Token);
        }
Esempio n. 5
0
        protected override void OnStartup(StartupEventArgs e)
        {
#if DEBUG
            IsDebug = true;
#endif
            IoCKernel.Init();
            ConfigureMainWindow();

            Current.MainWindow.Show();


            CheckForUpdate(IoCKernel.Get <SettingsWrapper>());
            _socketIoService = IoCKernel.Get <SocketIoService>();
            //_socketIoService.Connect();
            base.OnStartup(e);
        }
Esempio n. 6
0
        public StatsViewModel(ILogger logger, StatsService statsService, SettingsWrapper settingsWrapper,
                              SocketIoService socketIoService)
        {
            _settingsWrapper = settingsWrapper;

            DetailCommand = new RelayCommand(param => OpenPlayerDetail((string[])param));

            statsService.Stats.Subscribe(async stats =>
            {
                await Task.Run(() =>
                {
                    _stats             = stats;
                    FriendlyPlayers    = new ObservableCollection <DisplayPlayerStats>(stats.Where(p => p.Player.Relation != 2));
                    EnemyPlayers       = new ObservableCollection <DisplayPlayerStats>(stats.Where(p => p.Player.Relation == 2));
                    AvgXpFriendly      = TeamAvgXp(FriendlyPlayers);
                    AvgXpEnemy         = TeamAvgXp(EnemyPlayers);
                    AvgWinrateFriendly = TeamAvgWinRate(FriendlyPlayers);
                    AvgWinrateEnemy    = TeamAvgWinRate(EnemyPlayers);
                    AvgBattlesFriendly = TeamAvgBattles(FriendlyPlayers);
                    AvgBattlesEnemy    = TeamAvgBattles(EnemyPlayers);
                    ListVisibility     = Visibility.Visible;
                });
            });

            _settingsWrapper.UiSettingsChanged.Subscribe(async key =>
            {
                if (_stats == null)
                {
                    return;
                }
                logger.Info("Re-computing UI for players");
                FontSize = _settingsWrapper.CurrentSettings.FontSize;
                foreach (var player in _stats)
                {
                    await Task.Run(() => { player.ComputeUi(); });
                }
                socketIoService.Hub.SendColorKeys(_stats.Select(s => s.GetColorKeys()).ToList());
            });
        }
 public QrCodeWindow(SocketIoService socketIoService)
 {
     _socketIoService = socketIoService;
     InitializeComponent();
 }