void InitTimers() { pulseTimer = new RepeatedTimer(PulseTimerInterval); pulseTimer.Elapsed += () => sessionManager.WritePulse(); activeAppTimer = new RepeatedTimer(ActiveAppInterval); activeAppTimer.Elapsed += () => appMonitor.CheckActiveApplication(); regularScreenshotTimer = new RepeatedRandomTimer(MinIntershotTime, MaxIntershotTime); regularScreenshotTimer.Elapsed += () => TakeScreenshot(null); }
public void Run() { if (!CheckFunctionality()) { return; } InputSessionLocation(); appMonitor.OnActiveWindowChanged += OnActiveWindowChanged; InitTimers(); session = PrepareSession(sessionManager, systemInfo, out bool isNew); if (isNew) { Console.WriteLine("Position the SafeExamApp console on top of your canvas account page and press Enter to start the session"); Console.ReadLine(); TakeScreenshot(null); } var timers = new RepeatedTimer[] { activeAppTimer, pulseTimer, regularScreenshotTimer }; foreach (var t in timers) { t.Start(); } AppDomain.CurrentDomain.ProcessExit += OnConsoleClose; Console.WriteLine("Your session is now active"); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("DON'T CLOSE THIS WINDOW, WHILE YOUR EXAM IS RUNNING"); Console.ResetColor(); Console.WriteLine("Press Escape to complete the session at the end of the exam"); var prevShotTime = DateTime.MinValue; while (true) { Thread.Sleep(1000); try { foreach (var t in timers) { t.Poll(); } if (Console.KeyAvailable) { var key = Console.ReadKey(true); if (key.Key == ConsoleKey.Escape) { Console.WriteLine("Are you sure you want to complete your session (Y/N)?"); if (Console.ReadKey(true).Key == ConsoleKey.Y) { sessionManager.CompleteSession(session); Console.WriteLine("Your session is now over. The location of the log file can be seen below"); Console.WriteLine(session.FileName); Console.WriteLine("Don't forget to add this file to your submission archive or upload it to a cloud storage!"); break; } else { Console.WriteLine("Session is continuing"); } } } } catch (Exception e) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"{DateTime.Now}: {e.Message}"); Console.ResetColor(); } } AppDomain.CurrentDomain.ProcessExit -= OnConsoleClose; Console.ReadLine(); }