Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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 = "Ожидаем логического соединения...";
            }
        }
Ejemplo n.º 3
0
        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        = "Физическое соединение открыто.";
            }
        }
Ejemplo n.º 4
0
        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;
            }
        }