public override void Run() { while (IsRunning) { try { if (addQueue.Count > 0) { lock (addQueue) { foreach (IClient c in addQueue) { Clients.Add(c); } addQueue.Clear(); if (OnUserCountChange != null) { OnUserCountChange(this, Clients.Count); } } } if (removeQueue.Count > 0) { lock (removeQueue) { foreach (IClient c in removeQueue) { Clients.Remove(c); } removeQueue.Clear(); if (OnUserCountChange != null) { OnUserCountChange(this, Clients.Count); } if (Clients.Count == 0) { SleepMode(); } } } foreach (IClient client in Clients) { if (client.IsConnected == false) { client.Close(); Clients.Remove(client); continue; } if (client.DataAvailable) { while (client.DataAvailable) { byte[] buffer; client.Read(out buffer); if (buffer == null || buffer.Length == 0) { continue; } Packet packet = JsonConvertor.FromJSON <Packet>(Encoding.UTF8.GetString(buffer)); HandleRequest(client, packet); } } } if (Clients.Count < 250) { Thread.Sleep(2); } } catch (Exception ex) { DebugLogger.AddLog("Exception:" + ex.Message); } } }