// Протокол обработки запроса на получение файла. public void Handle_Recieve() { Message mes = new Message(string.Empty); // Строка для хранения имени запрашиваемого файла. string flnme = ""; while (true) { // Получение имени файла. mes = NW.Recieve(stream); if (!(mes is ErrorMessage)) { flnme = mes.Get_Data(); } else { Console.WriteLine("Ending session"); Thread.CurrentThread.Abort(); } // Отчет о начале передачи. Console.WriteLine("Handling thread: Start receiving protocol for " + flnme); Thread h; lock (Server.ThisLlock) { // Запуск передачи файла. File_Translator FT = new File_Translator(client, flnme, Files, Hubs); h = new Thread(FT.Receiving); h.Start(); // Ожидание окончания передачи. h.Join(); h.Abort(); flnme = string.Empty; } } }
// Протокол обработки запроса на отправку файла. public void Handle_Send() { // Массив для считывания ответа из потока. Byte[] data = new Byte[256]; // Строка для имени файла. string name = string.Empty; Message mes = new Message(string.Empty); // Цикл ожидания ответа. while (true) { mes = NW.Recieve(stream); if (!(mes is ErrorMessage)) { name = mes.Get_Data(); } else { Console.WriteLine("Ending session"); Thread.CurrentThread.Abort(); } // Отчет о начале передачи. Console.WriteLine("Handling thread: Start sending protocol for " + name); Thread h; lock (Server.ThisLlock) { // Запуск передачи файла. File_Translator FT = new File_Translator(client, name, Files, Hubs); name = string.Empty; h = new Thread(FT.Sending); h.Start(); // Ожидание конца передачи файла. h.Join(); h.Abort(); } } }
// Получить пакет. public byte[] Encrypt(Message m) { int type = -1; if (m is Inform_of_Down_Message) { type = 0; } if (m is Inform_of_Rec_Message) { type = 1; } if (m is ListMessage) { type = 2; } if (m is RequestMessage) { type = 3; } if (m is FilePartMessage) { type = 4; } if (m is EndMessage) { type = 5; } if (m is ResponseMessage) { type = 6; } if (m is ErrorMessage) { type = 7; } if (m is HubInformMessage) { type = 8; } // Буффер для передачи данных. byte[] bytes = new byte[1024]; // Вспомогательная строка для составления пакета. string assis = string.Empty; // Формирование пакета. assis += type.ToString(); assis += m.Get_Data(); // Кодировка пакета. bytes = Encoding.ASCII.GetBytes(assis); return bytes; }