public static string GetFormattedDataLine(KeysData data) { bool AppendCombID = true, AppendHoldTime = true, AppendFlightTime = true; bool AppendDi1 = false, AppendDi2 = false, AppendDi3 = false; string formattedDataString = ""; if (AppendCombID) { formattedDataString += data.CombinationID.ToString(); } if (AppendHoldTime) { formattedDataString += ',' + ((int)data.HoldTime.TotalMilliseconds).ToString(); } if (AppendFlightTime) { formattedDataString += ',' + ((int)data.FlightTime.TotalMilliseconds).ToString(); } if (AppendDi1) { formattedDataString += ',' + ((int)data.Digraph1.TotalMilliseconds).ToString(); } if (AppendDi2) { formattedDataString += ',' + ((int)data.Digraph2.TotalMilliseconds).ToString(); } if (AppendDi3) { formattedDataString += ',' + ((int)data.Digraph3.TotalMilliseconds).ToString(); } return(formattedDataString); }
public void KeyWasReleased(char charReleased, long timeInTicks) { charsReleased.Add(charReleased); timeSinceLastAction = timeInTicks; KeyPressRelease keyReleased = KeysPressedAndReleased.LastOrDefault(x => x.Character == charReleased); if (keyReleased != null) { keyReleased.TimeReleasedInTicks = timeInTicks; } KeysData keysData = KeysDataWhereFirstCharIs(charReleased); if (keysData != null) { RecordOnReleaseData(charReleased, timeInTicks, keysData); } keysCurrentlyHeld.Remove(charReleased); timeOfPreviousRelease = timeInTicks; previousReleaseKeysData = keysData; }
private void RecordOnReleaseData(char charReleased, long timeInTicks, KeysData keysData) { keysData.WaitingForEvents.Remove(KeysData.WaitingForEvent.EFirstKeyRelease); keysData.HoldTime = TimeSpan.FromTicks(timeInTicks - keysCurrentlyHeld[charReleased]); if (NextKeyAlreadyPressed(keysData)) { KeyPressRelease keyReleased = KeysPressedAndReleased.FirstOrDefault(x => x.Character == keysData.SecondChar); if (keyReleased != null) { keysData.FlightTime = TimeSpan.FromTicks(keyReleased.TimePressedInTicks - timeInTicks); } } KeysData previousKeyData = KeysDataWhereSecondCharIs(charReleased); if (previousKeyData != null) { previousKeyData.WaitingForEvents.Remove(KeysData.WaitingForEvent.ESecondKeyRelease); } if (previousReleaseKeysData != null) { if (KeysDataWhereSecondCharIs(charReleased) == null) { KeyPressRelease secondKeyReleasedFirst = KeysPressedAndReleased[KeysPressedAndReleased.FindIndex(x => x.Character == keysData.FirstChar) + 1]; keysData.Digraph2 = TimeSpan.FromTicks(secondKeyReleasedFirst.TimeReleasedInTicks - timeInTicks); keysData.Digraph3 = GetDigraph3(keysData); RemoveUnnecesarryKeys(charReleased); } else // This happens when the second key of the key combination is released first { previousKeyData = KeysDataWhereSecondCharIs(charReleased); previousKeyData.Digraph2 = GetDigraph2(timeInTicks, previousKeyData); previousKeyData.Digraph3 = GetDigraph3(previousKeyData); previousKeyData.WaitingForEvents.Remove(KeysData.WaitingForEvent.ESecondKeyRelease); KeyPressRelease secondKeyReleasedFirst = KeysPressedAndReleased.FirstOrDefault(x => x.Character == keysData.SecondChar); if (secondKeyReleasedFirst != null) { keysData.Digraph2 = TimeSpan.FromTicks(secondKeyReleasedFirst.TimeReleasedInTicks - timeInTicks); keysData.Digraph3 = GetDigraph3(keysData); } RemoveUnnecesarryKeys(charReleased); } } }
private TimeSpan GetDigraph2(long timeInTicks, KeysData keysData) { KeyPressRelease keyReleased = KeysPressedAndReleased.FirstOrDefault(x => x.Character == keysData.FirstChar); if (keyReleased != null) { return(TimeSpan.FromTicks(timeInTicks - keyReleased.TimeReleasedInTicks)); } return(new TimeSpan(0)); }
public void End() { lastKeyPress = '\0'; timeOfPreviousRelease = 0; timeOfPreviousPress = 0; previousReleaseKeysData = null; timer.Enabled = false; CurrentState = SessionState.Inactive; UnprocessedData = new List <KeysData>(); DataRecorded = new List <KeysData>(); timeSinceLastAction = 0; KeysPressedAndReleased = new List <KeyPressRelease>(); }
private bool PreviousKeysDataHasReleasedFirstKey(KeysData keysData, List <KeysData> unprocessedData) { KeysData previousKeysData; int indexOfCurrentKeysData = unprocessedData.FindIndex(x => x == keysData); if (indexOfCurrentKeysData == 0) { return(false); } previousKeysData = unprocessedData[indexOfCurrentKeysData - 1]; return(previousKeysData.WaitingForEvents.Contains(KeysData.WaitingForEvent.EFirstKeyRelease)); }
public void KeyWasPressed(char charPressed, long timeInTicks) { timeSinceLastAction = timeInTicks; ResetTimer(); if (keysCurrentlyHeld.ContainsKey(charPressed)) { return; } keysCurrentlyHeld.Add(charPressed, timeInTicks); if (CurrentState.Equals(SessionState.Inactive)) { CurrentState = SessionState.Active; } else { DataRecorded.Last().SecondChar = charPressed; DataRecorded.Last().CombinationID = HelperFunctions.GetCombinationId(lastKeyPress, charPressed); if (!NextKeyAlreadyPressed(DataRecorded.Last())) { DataRecorded.Last().FlightTime = TimeSpan.FromTicks(timeInTicks - KeysPressedAndReleased.Last().TimeReleasedInTicks); } DataRecorded.Last().Digraph1 = TimeSpan.FromTicks(timeInTicks - timeOfPreviousPress); DataRecorded.Last().WaitingForEvents.Remove(KeysData.WaitingForEvent.ESecondKeyPress); } KeysPressedAndReleased.Add(new KeyPressRelease(charPressed, timeInTicks)); KeysData keysData = new KeysData { FirstChar = charPressed }; DataRecorded.Add(keysData); UnprocessedData.Add(keysData); timeOfPreviousPress = timeInTicks; lastKeyPress = charPressed; }
private bool NextKeyAlreadyPressed(KeysData keysData) { return(lastKeyPress != keysData.FirstChar); }
private TimeSpan GetDigraph3(KeysData keysData) { return(keysData.HoldTime + keysData.Digraph2); }