/// <summary> /// Запускаем решение части задачи у себя /// </summary> void RunPartOwnWork(MessageData messageData) { Task.Run(() => { var answer = Worker.DoWork(messageData); answersValues.Add(answer.Value); CurrentForm.output.BeginInvoke(new InvokeDelegate( () => { CurrentForm.output.Text += $"\nМы сами решили подзадачу и получили ответ {answer.Value}"; })); Console.WriteLine($"\nМы сами решили подзадачу и получили ответ {answer.Value}"); }); }
private static void ReturnAnswer(object socket) { var clientSocket = socket as Socket; try { var message = (Message)HelperClass.ByteArrayToObject(HelperClass.RecieveMessage(clientSocket)); //string query = site + info + $"&mode={mode}"; //message = ReTry(query); //Console.WriteLine($"{DateTime.Now.ToString(new CultureInfo("ru-RU"))} " + // $"{Thread.CurrentThread.Name} : " + // $"The message is received"); //если пришло сообщение от другого клиента с приветсвием if (message.Command == Command.Greeting) { clientSocket.Send(HelperClass.ObjectToByteArray(true)); var clientIpEndPoint = (IPEndPoint)clientSocket.RemoteEndPoint; Client.otherClients.TryAdd(clientIpEndPoint.Address.ToString(), clientIpEndPoint); } //если пришло сообщение от другого клиента с просьбой решить подзадачу if (message.Command == Command.Work) { //если этот клиент уже решает какую-то подзадачу, то говорим, //что не можем пока брать на выполнение новую подзадачу if (Worker.IsBusy) { clientSocket.Send(HelperClass.ObjectToByteArray( new Answer { DoneWork = false, })); } //иначе начинаем решать новую подзадачу else { //начинаем решать подзадачу var answer = Worker.DoWork(message.Data); //отправляем ответ на подзадачу clientSocket.Send(HelperClass.ObjectToByteArray(answer)); } } } catch (Exception ex) { //Console.WriteLine($"{DateTime.Now.ToString(new CultureInfo("ru-RU"))} " + // $"{Thread.CurrentThread.Name} :" + // ex.Message); Worker.IsBusy = false; //message = "Извените, но на данный момент невозможно получить ответ"; //if (handler != null && handler.Connected) // handler.Send(HelperClass.ObjectToByteArray(message)); } finally { if (clientSocket != null && clientSocket.Connected) { // закрываем сокет clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); } } }