/// <summary> /// Primary worker thread. /// </summary> /// <param name="socket"></param> private void RunWorker(object socket) { lock (this) { if (mIsShuttingDown == false) { AsyncCallback dataReceivedCallback = ((mReceiveDataInline) && (mUseSynchronousCommunication == false) ? new AsyncCallback(OnDataReceived) : null); TcpConnection connection = new TcpConnection((Socket)socket, dataReceivedCallback); mMessageLength = int.MinValue; mClientConnections.Add(connection); if (mReceiveDataInline && mUseSynchronousCommunication) { #if WINDOWS Thread dataReceiveThread = new Thread(SynchronousReceiveData); dataReceiveThread.Name = "TcpServer ReceiveData Thread"; connection.Tag = dataReceiveThread; mDataReceiveThreads.Add(dataReceiveThread); dataReceiveThread.Start(connection); #else ThreadStartDelegateWrapper threadStartWrapper = new ThreadStartDelegateWrapper(new ThreadStartWrapperHandler(SynchronousReceiveData), connection); Thread dataReceiveThread = new Thread(threadStartWrapper.Start); dataReceiveThread.Name = "TcpServer ReceiveData Thread"; connection.Tag = dataReceiveThread; mDataReceiveThreads.Add(dataReceiveThread); dataReceiveThread.Start(); #endif } OnConnected(new TcpConnectedEventArgs(connection)); } } }