Пример #1
0
        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);
        }
Пример #2
0
        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();
        }