private void ReceiveMessage(byte[] packet, bool check) { if (!check) { MessageBox.Show("Получен повреждённый пакет."); return; } var stream = new MemoryStream(packet); var reader = new BinaryReader(stream); switch ((MessageType)reader.ReadByte()) { case MessageType.FileName: ParseFileName(reader); break; case MessageType.ReceiveNotReady: timer.Stop(); CloseButton.IsEnabled = true; FileBox.IsEnabled = true; DirectoryBox.IsEnabled = true; StatusText.Text = "Физическое соединение открыто."; MessageBox.Show("Принимающая сторона не готова к логическому соединению."); break; case MessageType.FileRequest: SendFileChunk(reader); break; case MessageType.FileChunk: SaveFileChunk(reader); break; case MessageType.FileReceived: timer.Stop(); sending = null; CloseButton.IsEnabled = true; FileBox.IsEnabled = true; DirectoryBox.IsEnabled = true; DisconnectButton.IsEnabled = false; StatusText.Text = "Файл успешно передан."; Title = "Локальная безадаптерная сеть"; ProgressBar.Value = 1; SendPacket(new byte[] { (byte)MessageType.FileReceivedOk }); Physical.SetRts(folderReady); break; case MessageType.FileReceivedOk: if (sending == null) { break; } timer.Stop(); sending = null; CloseButton.IsEnabled = true; FileBox.IsEnabled = true; DirectoryBox.IsEnabled = true; DisconnectButton.IsEnabled = false; StatusText.Text = "Файл успешно получен."; Title = "Локальная безадаптерная сеть"; break; case MessageType.Disconnect: timer.Stop(); if (fileStream != null) { fileStream.Close(); } sending = null; CloseButton.IsEnabled = true; FileBox.IsEnabled = true; DirectoryBox.IsEnabled = true; DisconnectButton.IsEnabled = false; StatusText.Text = "Логическое соединение разорвано."; Title = "Локальная безадаптерная сеть"; SendPacket(new byte[] { (byte)MessageType.DisconnectOk }); Physical.SetRts(folderReady); break; case MessageType.DisconnectOk: timer.Stop(); Physical.SetRts(folderReady); break; default: MessageBox.Show("Получен неизвестный пакет."); break; } }