Пример #1
0
        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);
                }
            }
        }