/// <summary> /// Метод обработки конкретного клиента в отдельном потоке. /// </summary> public void Process() { NetworkStream networkStream = null; // Базовый поток данных для доступа к сети. Task task = null; // Отправляемое задание. try { networkStream = _client.GetStream(); // Получаем информацию о подключённом агенте. string agentInfoStr = GetStrFromStream(networkStream); AgentInformation agentInfo = AgentInformation.Deserealize(agentInfoStr); // ??????? long taskSize = agentInfo.CoresCount * agentInfo.PasswordPerSecond * 5; while (_taskManager.GetTask(taskSize, ref task)) { // Отправляем задание агенту. byte[] data = Encoding.Unicode.GetBytes(task.Serealize()); networkStream.Write(data, 0, data.Length); // Получаем результат работы агента. string password = GetStrFromStream(networkStream); // Обрабатываем результат работы агента. if (password != "----------") { _taskManager.PasswordFound(password); } } } catch (Exception) { // Отправляем диспетчеру задач задание, во время // выполнения которого агент завершил свою работу. _taskManager.PushTask(task); } finally { if (networkStream != null) { networkStream.Close(); } if (_client != null) { _client.Close(); } } }