private void SwitchToLocalWatchDog() { _watchDogSync.EnterWriteLock(); try { _logger.Info("Switching to Master node"); _watchDogCancellationTokenSource?.Cancel(); if (_cancellationToken.IsCancellationRequested) { _logger.Info("Bus stopped, can't switch to slave node"); return; } _watchDogCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(_cancellationToken); var volumePipeline = new ProcessVolumePipeline(_watchDogCancellationTokenSource.Token, _logger, _stateManager, _cacheAside, _processRepository, VolumeHandler, _resolver, EventAggregator, _branchEngineSubscriber);//todo move to watchdog class var watchDog = new ProcessWatchDog(_logger, _stateManager, _branchEngineSubscriber, _cacheAside, SerializersFactory.Instance, EntityFactory, EventAggregator, _storage, PubSubFactory, _resolver, _batchLoggerFactory, _processRepository, volumePipeline); _watchDogPipeline = new Pipeline <IWatchDogMessage>(watchDog); _watchDogCancellationTokenSource.Token.Register(() => { _logger.Info("Master node ended"); _logger.Debug("Master node ended"); watchDog.Dispose(); }); watchDog.Start(_watchDogCancellationTokenSource.Token); _processRepository.InvokeOnMaster(); _leaderManager.InitializationComplete(); _logger.Info("Switching to Master node complete"); _logger.Debug("Running Master node"); } catch (Exception e) { _logger.Error("Error switching watchdog to primary node", e); } finally { _watchDogSync.ExitWriteLock(); } }
public RuntimeChecker(ServerType type, string username) { this.type = type; this.username = username; try { FileManagement fm2 = new FileManagement(); fm2.createFolder(1, username, getGame, null); FileManagement fm3 = new FileManagement(); fm3.createFolder(2, username, getGame, getMatchID); getTimeZip = TextHandling.GetUnixTimestamp(); } catch (Exception) { // we assume that the server is down. Environment.Exit(0); } if (!Directory.Exists(Core.AppPath + "acscreens")) { Directory.CreateDirectory(Core.AppPath + "acscreens"); } ZipStorer zip; zip = ZipStorer.Create(Core.AppPath + "acscreens\\log_" + getMatchID + "_" + getGame + "_" + getTimeZip + ".zip", "ESA AntiCheat log for match " + getMatchID.ToString()); zip.Close(); _fs = new FileStream(Core.AppPath + "acscreens\\log_" + getMatchID + "_" + getGame + "_" + getTimeZip + ".zip", FileMode.Open, FileAccess.ReadWrite, FileShare.None); TaskManagerIsRunning(); ProcessManagement.TriggerTaskmanager(false); writePreGameProcesses(); FileManagement fm4 = new FileManagement(); fm4.postFile(username, getGame, getMatchID, Core.AppPath + "ac_logbeforegame_" + getTimepre + "_matchid" + getMatchID + ".txt"); File.Delete(Core.AppPath + "ac_logbeforegame_" + getTimepre + "_matchid" + getMatchID + ".txt"); using (ScreenshotDump screenpre = new ScreenshotDump()) { try { AeroControl ac = new AeroControl(); ac.ControlAero(false); screenpre.SaveToFile(Core.AppPath + "acscreens\\" + "screen_beforegame_" + getTimepre + "_matchid" + getMatchID + ".jpeg"); fm4.postFile(username, getGame, getMatchID, Core.AppPath + "acscreens\\" + "screen_beforegame_" + getTimepre + "_matchid" + getMatchID + ".jpeg"); File.Delete(Core.AppPath + "acscreens\\" + "screen_beforegame_" + getTimepre + "_matchid" + getMatchID + ".jpeg"); } catch (Exception) { File.WriteAllText(Core.AppPath + "acscreens\\captureerror_" + getTimepre + "_matchid" + getMatchID + ".txt", "Failed to grab screenshot! at " + DateTime.Now.TimeOfDay); FileManagement fm = new FileManagement(); fm.postFile(username, getGame, getMatchID, Core.AppPath + "acscreens\\captureerror_" + getTimepre + "_matchid" + getMatchID + ".txt"); File.Delete(Core.AppPath + "acscreens\\captureerror_" + getTimepre + "_matchid" + getMatchID + ".txt"); ReportForm ef = new ReportForm(); ef.label2.Text = "Screenshot capture failed!"; ef.Show(); } } //---timer--- this.timer = new Timer() { AutoReset = true, Interval = 60000, Enabled = true }; timer.Elapsed += tick; timer.Start(); this.watcher = new ProcessWatchDog(1000); this.watcher.OnNewProcess += new NewProcessStartedEvent(watcher_OnNewProcess); this.gamerunningtimer = new Timer() { AutoReset = true, Interval = 5000, Enabled = true }; gamerunningtimer.Elapsed += gametick; gamerunningtimer.Start(); LaunchGame(); }