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