private void SendFile_Click(object sender, RoutedEventArgs e) { if (CtsIndicator.IsChecked != true || DsrIndicator.IsChecked != true) { MessageBox.Show("Принимающая сторона не готова к логическому соединению."); return; } fileStream = fileDialog.OpenFile(); var hash = new SHA512CryptoServiceProvider().ComputeHash(fileStream); fileStream.Seek(0, SeekOrigin.Begin); var stream = new MemoryStream(); var writer = new BinaryWriter(stream); writer.Write((byte)MessageType.FileName); writer.Write(fileDialog.SafeFileName); writer.Write(fileStream.Length); writer.Write(hash); // 64 bytes for security sending = true; CloseButton.IsEnabled = false; FileBox.IsEnabled = false; DirectoryBox.IsEnabled = false; StatusText.Text = "Установка логического соединения..."; Title = "Отправляем " + fileDialog.SafeFileName; Physical.SetRts(true); SendPacket(stream.ToArray()); }
private void SelectDirectory_Click(object sender, RoutedEventArgs e) { var result = folderDialog.ShowDialog(); if (result == wf.DialogResult.OK) { DirectoryName.Text = folderDialog.SelectedPath; folderReady = true; Physical.SetRts(true); sending = null; StatusText.Text = "Ожидаем логического соединения..."; } }
private void OpenButton_Click(object sender, RoutedEventArgs e) { var port = PortsList.SelectedItem; if (port == null) { MessageBox.Show("Сначала необходимо выбрать порт."); } else { Physical.Connect((string)port); if (folderReady) { Physical.SetRts(true); } OpenButton.IsEnabled = false; CloseButton.IsEnabled = true; PortsList.IsEnabled = false; FileBox.IsEnabled = true; DirectoryBox.IsEnabled = true; StatusText.Text = "Физическое соединение открыто."; } }
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; } }