Example #1
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;
            }
        }