コード例 #1
0
ファイル: GiveawayViewModel.cs プロジェクト: ocgineer/OakBot
        /// <summary>
        /// Initializes a new Giveaway module, seperate from other modules.
        /// </summary>
        /// <param name="id">Id of the module, must be unique and can't be lower than 1.</param>
        /// <param name="rndGen">A preseeded pseudo random generator to be used in the module.</param>
        /// <param name="ccs">Chat Service to receive and send messages.</param>
        /// <param name="wes">WebSocket Event Service to push out giveaway events to websocket.</param>
        public GiveawayViewModel(int id, Random rndGen, IChatConnectionService ccs, IWebSocketEventService wes)
        {
            // Store references
            _moduleId       = id;
            _rndGen         = rndGen;
            _chatService    = ccs;
            _wsEventService = wes;

            // Initialize collections and lists
            _listEntries        = new ObservableCollection <GiveawayEntry>();
            _listWinners        = new ObservableCollection <GiveawayEntry>();
            _listMessagesWinner = new ObservableCollection <TwitchChatMessage>();

            // Initialize MediaPlayer
            _mediaPlayer = new MediaPlayer();

            // Set initial timestamps and spans
            _timestampOpened       = new DateTime(0);
            _timestampClosed       = new DateTime(0);
            _timestampDraw         = new DateTime(0);
            _elapsedOpenTime       = new TimeSpan(0);
            _elapsedNoResponseTime = new TimeSpan(0);
            _elapsedInterval       = new TimeSpan(0, 0, 1);

            // Initialize timers
            _timerOpen = new Timer()
            {
                AutoReset = false
            };
            _timerOpen.Elapsed += _TimerOpen_Elapsed;
            _timerResponse      = new Timer()
            {
                AutoReset = false
            };
            _timerResponse.Elapsed += _TimerResponse_Elapsed;
            _timerElapsed           = new Timer(_elapsedInterval.TotalMilliseconds);
            _timerElapsed.Elapsed  += _TimerElapsed_Elapsed;
            _timerElapsed.Start();

            // Set a 'winner' to display
            _selectedWinner = new GiveawayEntry {
                DisplayName = "WINNER"
            };
            _WinnerHasReplied = true;

            // Load in previous saved settings else use new default settings
            var loaded = BinaryFile.ReadBinFile($"GivewawayModule{ID}");

            if (loaded != null && loaded is GiveawayModuleSettings)
            {
                // Success, set last saved settings and set previous winners
                _moduleSettings = (GiveawayModuleSettings)loaded;
                if (_moduleSettings.SavedWinnersList?.Count > 0)
                {
                    _listWinners = new ObservableCollection <GiveawayEntry>(_moduleSettings.SavedWinnersList);
                }
            }
            else
            {
                // Failure, load defaults
                _moduleSettings = new GiveawayModuleSettings();
            }

            // Transmit WS event
            _wsEventService.SendRegisteredEvent("GIVEAWAY_DONE",
                                                new GiveawayWebsocketEventBase(_moduleId));

            // Register to service events and system broadcast messages
            _chatService.ChatMessageReceived += _chatService_ChatMessageReceived;
        }