コード例 #1
0
            public async Task Enter(StateMachine <Triggers, States> sm, WorkTime workTime, WMonitorAlghorithm alghorithm)
            {
                InProgress = true;
                _cts       = new CancellationTokenSource();
                alghorithm._canCapureMouseKeyboard = true;
                bool faceDetected   = false;
                bool faceRecognized = false;


                while (!faceRecognized || !faceDetected)
                {
                    _workTimeEventService.StartTempChanges();
                    _workTimeEventService.TryStartWatchingScreen();
                    _workTimeEventService.StartRecognitionFailure();

                    Log.Logger.Debug($"Starting {_config.Delay} state 3 delay");

                    try
                    {
                        await Task.Delay(_config.Delay, _cts.Token);
                    }
                    catch (TaskCanceledException)
                    {
                        InProgress = false;
                        return;
                    }

                    (faceDetected, faceRecognized) = await _faceRecognition.RecognizeFace(workTime.User);

                    alghorithm.State3Result((faceDetected, faceRecognized));

                    Log.Logger.Debug(
                        $"State 3 face recognized: {faceRecognized} face detected face recognized: {faceDetected}");

                    if (!faceRecognized || !faceDetected)
                    {
                        _workTimeEventService.DiscardTempChanges();
                        if (!TryAddRecognitionFailure(faceDetected, faceRecognized))
                        {
                            InProgress = false;
                            sm.Next(Triggers.Stop);
                            return;
                        }
                    }
                    else
                    {
                        _workTimeEventService.TryAddWatchingScreen();
                        _workTimeEventService.StopRecognitionFailure();
                        _workTimeEventService.CommitTempChanges();
                    }
                }

                InProgress = false;
                sm.Next(Triggers.FaceRecog);
            }
コード例 #2
0
        public void g()
        {
            var workTime =
                _buildService.CreateStartedManually(UserTestUtils.CreateTestUser(), DateTime.UtcNow.AddMinutes(60));

            _service.SetWorkTime(workTime);
            _service.KeyboardEventBufferSz = 1;
            _service.MouseEventBufferSz    = 1;
            workTime.StartManually();

            _service.StartTempChanges();

            _service.AddKeyboardEvent(new MonitorEvent()
            {
                EventStart  = DateTime.UtcNow,
                TotalTimeMs = 200,
            });

            _service.AddMouseEvent(new MonitorEvent()
            {
                EventStart  = DateTime.UtcNow,
                TotalTimeMs = 500
            });

            _service.AddKeyboardEvent(new MonitorEvent()
            {
                EventStart  = DateTime.UtcNow.AddSeconds(65),
                TotalTimeMs = 200,
            });

            _service.AddMouseEvent(new MonitorEvent()
            {
                EventStart  = DateTime.UtcNow.AddSeconds(65),
                TotalTimeMs = 500
            });

            var found = _repository.Find(workTime.User, DateTime.UtcNow);

            found.KeyboardActionEvents.Count.Should().Be(0);
            found.MouseActionEvents.Count.Should().Be(0);


            _service.CommitTempChanges();
            workTime.PendingEvents.Count.Should().Be(0);


            found = _repository.Find(workTime.User, DateTime.UtcNow);
            found.KeyboardActionEvents.Count.Should().Be(1);
            found.MouseActionEvents.Count.Should().Be(1);
        }