/// <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; }