Exemplo n.º 1
0
            public void Process()
            {
                Stream = tcpClient.GetStream();
                Console.WriteLine("Клиент с номером потока {0} - подключился", ThreadNumber);
                File.AppendAllText(path, "Клиент с номером потока " + ThreadNumber + " - подключился\n");
                string oldMessage = null;

                while (true)
                {
                    try
                    {
                        if (ClientNumber <= 2)
                        {
                            string newMessage = GetMessage(Stream);
                            if (MessagesInProcces.Any(m => m == newMessage))
                            {
                                string attention = "Данный запрос уже находится в обработке!";
                                SendMessage(attention, Stream);
                                if (ClientWithDublet.All(c => c.Item2 != newMessage))
                                {
                                    ClientWithDublet.Add(new Tuple <Client, string>(this, newMessage));
                                }
                            }
                            else
                            {
                                if (serverIsBusy)
                                {
                                    string attention = "Запрос уже обрабатывается!";
                                    SendMessage(attention, Stream);
                                }
                                else
                                {
                                    oldMessage = newMessage;
                                    ProcessingMessage(oldMessage, Stream);
                                    oldMessage = null;
                                }
                            }
                        }
                        else
                        {
                            GetMessage(Stream);
                            SendMessage("Превышен лимит потоков, попробуйте позже", Stream);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Клиент с номером потока {0} - отключился", ThreadNumber);
                        File.AppendAllText(path, "Клиент с номером потока " + ThreadNumber + " - отключился\n");
                        Clients.Remove(this);
                        for (int i = 0; i < Clients.Count; i++)
                        {
                            Clients[i].ClientNumber = i;
                        }
                        return;
                    }
                }
            }