private bool processConnection(TcpServerConnection conn) { bool moreWork = false; if (conn.processOutgoing(m_maxSendAttempts)) { moreWork = true; } if (OnDataAvailable != null && activeThreads < m_maxCallbackThreads && conn.Socket.Available > 0) { lock (activeThreadsLock) { activeThreads++; } conn.CallbackThread = new Thread(() => { OnDataAvailable(conn); }); conn.CallbackThread.Start(); System.Threading.Thread.Sleep(0); } return(moreWork); }
private void runListener() { while (m_isOpen && m_port >= 0) { try { if (listener.Pending()) { TcpClient socket = listener.AcceptTcpClient(); TcpServerConnection conn = new TcpServerConnection(socket, m_encoding); if (OnConnect != null) { lock (activeThreadsLock) { activeThreads++; } conn.CallbackThread = new Thread(() => { OnConnect(conn); }); conn.CallbackThread.Start(); } lock (connections) { connections.Add(conn); } } else { System.Threading.Thread.Sleep(m_idleTime); } } catch (ThreadInterruptedException) { } //thread is interrupted when we quit catch (Exception e) { if (m_isOpen && OnError != null) { OnError(this, e); } } } }