private void ReceiveData() { empRunning = true; while(empRunning){ try{ switch(empState){ case EmpaticaState.fresh: Debug.Log("Receive thread running, state is fresh, trying to open Empatica connection"); Debug.Log("Client connected: " + client.Connected); stream.Write(encoding.GetBytes("open"),0,4); //Use this to "open" - then "start" empState = EmpaticaState.opening; break; case EmpaticaState.opening: Debug.Log("Opening Empatica connection"); if(ReadResponse() == "OK\n") { stream.Write(encoding.GetBytes("start"),0,5); empState = EmpaticaState.starting; } break; case EmpaticaState.starting: Debug.Log("Empatica connection opened, will start registering stream"); if(ReadResponse() == "OK\n") { empState = EmpaticaState.receiving; } break; case EmpaticaState.receiving: if(stream.DataAvailable) { ArrayList chunk = ReadData(); dataStorage.AddRange(chunk); if(reportDuringReading && dataStorage.Count%64 == 0) Debug.Log("Read " + dataStorage.Count.ToString() + " samples."); if(baseLine == 0 && dataStorage.Count > 840) baseLine = CalculateBaseLine(); } break; case EmpaticaState.stopping: if(!sentStopSignal) { stream.Write(encoding.GetBytes("stop"),0,4); sentStopSignal = true; } latestData = StopReading(); if(latestData[0] as string == "OK\n") { empState = EmpaticaState.stopped; } else if (latestData[0] as string == "ER\n") { empState = EmpaticaState.error; } else { dataStorage.AddRange(latestData); if(reportDuringReading && dataStorage.Count%10 == 0) Debug.Log("Read " + dataStorage.Count.ToString() + " samples."); } break; case EmpaticaState.stopped: Debug.Log("Empatica stream stopped"); stream.Write(encoding.GetBytes("close"),0,5); empState = EmpaticaState.closing; break; case EmpaticaState.closing: Debug.Log("Closing the Empatica connection"); if(ReadResponse() == "OK\n") { empState = EmpaticaState.closed; } break; case EmpaticaState.closed: Debug.Log("Empatica connection gracefully closed - aborting the receiving thread"); stream.Close(); client.Close(); receiveThread.Abort(); break; case EmpaticaState.error: break; default: break; } } catch(SocketException e) { print(e.Message); } } }
public void StopEmpatica() { empState = EmpaticaState.stopping; }