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