private void clientSendCommand(newCLient sender, HeaderDsc header, byte[] data) { if (sender.clientState == 1) // если сообщение получено от серверного приложения { try { Cmd cmd = new Cmd(); using (MemoryStream Memory = new MemoryStream(header.DataSize)) // десериализация заголовка { Memory.Write(data, 0, data.Length); Memory.Position = 0; BinaryFormatter bf = new BinaryFormatter(); cmd = (Cmd)bf.Deserialize(Memory); } foreach (Guid guid in cmd.list) // поиск выбранных клиентов { foreach (newCLient cl in ClientList) { if (cl.clSpec.settings == null) { break; } if (cl.clSpec.settings.guid == guid) { byte[] index = BitConverter.GetBytes(header.comIndex); cl.Send(ServiceMessage.clCommand, this.guid, index); } } } } catch (Exception ex)// отправка ошибки на серверное приложение { string erMsg = ex.ToString() + " SERVER EXCEPTION WHILE SENDING CLIENT COMMAND"; sender.Send(ServiceMessage.error, guid, Encoding.Default.GetBytes(erMsg)); } } else // если это ответ от клиента { foreach (newCLient client in ClientList) { if (client.clientState == 1) { client.Send(ServiceMessage.clCommand, guid, data); } } } }
private void DataProc(newCLient sender, HeaderDsc header, byte[] data) { switch (header.Message) { case ServiceMessage.file: // получение файла FilePr file = new FilePr(); string path = "123" + header.ext; File.WriteAllBytes(path, data); if (!(file.CheckSum(path) == header.Hex)) { Console.WriteLine("file damaged"); // проверка целостности файла } break; case ServiceMessage.data: break; case ServiceMessage.Authorization: // подключение newUserAv(sender); Console.WriteLine("Authorization message from "); Console.WriteLine(sender.settings.guid); break; case ServiceMessage.Server: // подключение серверного приложения sender.clientState = 1; Console.WriteLine("///server app connected\n"); List <ClSpec> listCl = new List <ClSpec>(); // формирование перечисления описаний клиентов foreach (newCLient cl in ClientList) { if (cl.clSpec.settings == null) { cl.clSpec.settings = new xmlSettings.XmlSet(); } listCl.Add(cl.clSpec); } byte[] clList; using (MemoryStream Memory = new MemoryStream()) // сериализация перечисления { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(Memory, listCl); Memory.Position = 0; clList = new byte[Memory.Length]; var r = Memory.Read(clList, 0, clList.Length); } sender.SendCl(ServiceMessage.clList, this.guid, clList, 0); break; case ServiceMessage.cmd: // комманда коммандной строки if (sender.clientState == 1) // если сообщение получено от серверного приложения { Console.WriteLine("cmd get from serv app\n"); try { Cmd cmd = new Cmd(); using (MemoryStream Memory = new MemoryStream(header.DataSize)) // десериализация заголовка { Memory.Write(data, 0, data.Length); Memory.Position = 0; BinaryFormatter bf = new BinaryFormatter(); cmd = (Cmd)bf.Deserialize(Memory); } foreach (Guid guid in cmd.list) // поиск выбранных клиентов { foreach (newCLient cl in ClientList) { if (cl.clSpec.settings == null) { ; } else { if (cl.clSpec.settings.guid == guid) { byte[] str = Encoding.Default.GetBytes(cmd.strCmd); cl.Send(ServiceMessage.cmd, this.guid, str); } } } } } catch (Exception ex) // отправка ошибки на серверное приложение { string erMsg = ex.ToString() + " SERVER EXCEPTION WHILE SENDING CMD"; sender.Send(ServiceMessage.error, guid, Encoding.Default.GetBytes(erMsg)); } } else // если это ответ от клиента { Console.WriteLine("cmd response get from" + sender.tcpClient.ToString()); foreach (newCLient client in ClientList) { if (client.clientState == 1) { client.Send(ServiceMessage.cmd, guid, data); } } } break; case ServiceMessage.servCommand: break; case ServiceMessage.clCommand: clientSendCommand(sender, header, data); break; } }