예제 #1
0
 /// <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}");
     });
 }
예제 #2
0
        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();
                }
            }
        }