/* Funkcja: List<Int16> readPackets * * Przeznaczenie: Funkcja odczytująca bufor komunikacji z serwisem ThingGear Connector. * Odczytany ciag znaków dzielony jest znakiem '\r' - CR. * Następnie dla każdego ciągu znaków wywołwyana jest funkcja konwersji * pakietu JSON. Wg instrukcji ThinkGear Connector informacje * wysyłane są w formacie JSON, zagregowanych w pakiety oddzielone * znakiem '\r'. * Jeśli funkcja przetwarzająca pakiet zwróci wartość inną niż null, * to zostaje ona dodana do listy eegValues, która zwracana jest na * końcu funkcji. * * Argumenty funkcji: Stream s - sturmień komunikacji z serwisem ThinkGear Connector. * * Funkcja zwraca: List<Int16> eegValues - lista wartości EEG RAW odczytanych ze strumienia s. * * Zmienne globalne: brak * * Używane funkcje: * - convertData - funkcja konwertująca pakiet JSON na obiekt eegObj. */ private static List <Int16> readPackets(Stream s) { List <Int16> eegValues = new List <Int16>(); if (s.CanRead) { int bytesRead = 0; const Int16 bufferSize = 2048; byte[] buffer = new byte[bufferSize]; /* Odczyt bufora strumienia s */ bytesRead = s.Read(buffer, 0, bufferSize); /* Podzielenie odczytanego ciągu znaków względem znaku CR ('\r') */ string[] packets = Encoding.UTF8.GetString(buffer, 0, bytesRead).Split('\r'); /* Konwersja odczytanych pakietów i aktualizacja bufora wartości EEG RAW */ foreach (string data in packets) { eegObj value = convertData(data); if (null != value) { eegValues.Add(value.rawEeg); } } } return(eegValues); }
/* Funkcja: eegObj convertData * * Przeznaczenie: Funkcja przetwarza pakiet jsonData odebrany od * ThinkgGear Connector korzystając z biblioteki JSON.NET. * Jeśli pakiet zawiera pole o nazwie rawEeg, to zwracany zostaje * obiekt, zawierający tą wartość EEG RAW. Struktura pakietów JSON * określona jest przez dokumentację ThinkGear Connector. * * Argumenty funkcji: string jsonData - ciąg bajtów, odczytany ze strumienia * komunikacji z serwisem ThinkGear Connector * * Funkcja zwraca: eegObj convertedData - obiekt z 1 polem eegRaw, określający * wartosć pomiaru EEG RAW, dokonanego przez opaskę MindWave * Mobile 2. Jeśli pakiet JSON nie zawiera wartośći EEG RAW, * to zwracana jest wartość null. * * Zmienne globalne: brak * * Używane funkcje: * - JsonConvert.DeserializeObject<T> - funkcja mapująca pakiet JSON na obiekt T */ private static eegObj convertData(string jsonData) { eegObj convertedData = null; try { convertedData = JsonConvert.DeserializeObject <eegObj>(jsonData); /* Wypisz dane w konsoli, jeśli pakiet zawiera dane eegRaw. */ Console.WriteLine(convertedData?.rawEeg); } catch { /* Konwersja nieudana */ } return(convertedData); }