Example #1
0
        public void GetData(int typeId)
        {
            FrameType type = (FrameType)typeId;

            byte[] ToDecode;
            byte[] Decoded;

            /*Log.Invoke(new EventHandler(delegate
             * {
             *  Log.AppendText("get frame " + type +"\n");
             * }));*/


            switch (type)
            {
            case FrameType.MSG:
                #region MSG
                if (IsConnected())
                {
                    int    n             = Port.BytesToRead;
                    byte[] msgByteBuffer = new byte[n];

                    Port.Read(msgByteBuffer, 0, n);     //считываем сообщение
                    string Message = Encoding.Default.GetString(msgByteBuffer);
                    Log.Invoke(new EventHandler(delegate
                    {
                        Log.AppendText("(" + Port.PortName + ") GetData: new message > " + Message + "\n");
                    }));

                    WriteData(null, FrameType.ACK);
                }
                else
                {
                    WriteData(null, FrameType.RET_MSG);
                }
                break;

                #endregion
            case FrameType.FILEOK:
                #region FILEOK
                if (IsConnected())
                {
                    int    n             = Port.BytesToRead;
                    byte[] msgByteBuffer = new byte[n];

                    Port.Read(msgByteBuffer, 0, n);     //считываем сообщение
                    string Message = Encoding.Default.GetString(msgByteBuffer);
                    Log.Invoke(new EventHandler(delegate
                    {
                        Log.AppendText("[" + DateTime.Now + "] : Получено предложение на прием файла размером: " + Message + "\n");
                    }));
                    //SuccessfulFrameNumber = int.Parse(Message);
                    int    Message_num = int.Parse(Message);
                    double fileSize    = Math.Round((double)Message_num / 1024, 3);
                    if (MessageBox.Show("Файл. Размер: " + fileSize.ToString() + " Кбайт.\nПринять?", "Прием файла", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        WriteData("OK", FrameType.ACK);
                    }
                }
                else
                {
                    WriteData(null, FrameType.RET_MSG);
                }
                break;

                #endregion
            case FrameType.FRAME:
                #region FRAME
                //if (IsConnected())
                //{
                //    int n = Port.BytesToRead;
                //    byte[] msgByteBuffer = new byte[n];

                //    Port.Read(msgByteBuffer, 0, n); //считываем сообщение
                //    string Message = Encoding.Default.GetString(msgByteBuffer);
                //    Log.Invoke(new EventHandler(delegate
                //    {
                //        Log.AppendText("[" + DateTime.Now + "] : Получено подтверждение об успешной доставке Frame " + Message + "\n");
                //    }));
                //    SuccessfulFrameNumber = int.Parse(Message);

                //    WriteData(null, FrameType.FILE);
                //}
                //else
                //{
                //    WriteData(null, FrameType.RET_MSG);
                //}
                //break;
                #endregion
            case FrameType.FILE:

                #region FILE
                if (IsConnected())
                {
                    byte   fileId   = (byte)Port.ReadByte();
                    string typeFile = TypeFileAnalysis(fileId);

                    byte[] size = new byte[sizeLenght];
                    Port.Read(size, 0, sizeLenght);
                    int ssize = (int)Double.Parse(Encoding.Default.GetString(size));

                    byte[] byte_NumOfFrames = new byte[NumOfFrameLenght];
                    Port.Read(byte_NumOfFrames, 0, NumOfFrameLenght);
                    int NumOfFrames = (int)Double.Parse(Encoding.Default.GetString(byte_NumOfFrames));

                    byte[] byte_FrameNumber = new byte[NumOfFrameLenght];
                    Port.Read(byte_FrameNumber, 0, NumOfFrameLenght);
                    int FrameNumber = (int)Double.Parse(Encoding.Default.GetString(byte_FrameNumber));


                    if (FrameNumber == 1)
                    {
                        //DialogResult result;

                        //result = MessageBox.Show("Файл. Размер: " + fileSize.ToString() + " Кбайт.\nПринять?", "Прием файла", MessageBoxButtons.YesNo);
                        //if (result == DialogResult.Yes)
                        //{
                        file_buffer = new byte[NumOfFrames * (Port.WriteBufferSize - 27)];
                        //}

                        //else
                        //{
                        //    Display.Invoke(new EventHandler(delegate
                        //    {
                        //        Display.AppendText(
                        //        "[" + DateTime.Now + "] : " + ": "
                        //        + "Вы не сохранили файл"
                        //        + "\r\n");
                        //        Display.ScrollToCaret();
                        //    }));
                        //}
                    }

                    Display.Invoke(new EventHandler(delegate
                    {
                        Display.AppendText(
                            "[" + DateTime.Now + "] : "
                            + "Сохраненный фрейм:"
                            + FrameNumber.ToString()
                            + "\r\n");
                        Display.ScrollToCaret();
                    }));
                    int    n       = Port.WriteBufferSize - InfoLen;
                    byte[] newPart = new byte[n];
                    Port.Read(newPart, 0, n);

                    newPart.CopyTo(file_buffer, n * (FrameNumber - 1));


                    if (FrameNumber == NumOfFrames)
                    {
                        Decoded  = new byte[ssize];
                        ToDecode = new byte[2];

                        for (int i = 0; i < ssize; i++)
                        {
                            ToDecode[0] = file_buffer[i * 2];
                            ToDecode[1] = file_buffer[(i * 2) + 1];
                            Decoded[i]  = Hamming.Decode(ToDecode);
                        }


                        SaveFileDialog saveFileDialog = new SaveFileDialog();

                        MainForm.Invoke(new EventHandler(delegate
                        {
                            saveFileDialog.FileName = "";
                            saveFileDialog.Filter   = "TypeFile (*." + typeFile + ")|*." + typeFile + "|All files (*.*)|*.*";
                            if (DialogResult.OK == saveFileDialog.ShowDialog())
                            {
                                File.WriteAllBytes(saveFileDialog.FileName, Decoded);
                                //WriteData(null, FrameType.ACK);
                                Display.Invoke(new EventHandler(delegate
                                {
                                    Display.AppendText(
                                        "[" + DateTime.Now + "] : "
                                        + "Файл успешно получен"
                                        + "\r\n");
                                    Display.ScrollToCaret();
                                }));
                            }
                            else
                            {
                                // MessageBox.Show("Отмена ");
                                Display.Invoke(new EventHandler(delegate
                                {
                                    Display.AppendText(
                                        "[" + DateTime.Now + "] : " + ": "
                                        + "Вы не сохранили файл"
                                        + "\r\n");
                                    Display.ScrollToCaret();
                                }));
                            }
                        }));
                    }

                    WriteData(FrameNumber.ToString(), FrameType.FRAME);
                }
                else
                {
                    WriteData(null, FrameType.ERR_FILE);
                }

                break;
                #endregion
            //======================================================



            case FrameType.ACK:
                #region ACK
                WriteData(FilePath, FrameType.FILE);
                break;
                #endregion

            case FrameType.RET_MSG:
                #region RET_MSG
                Log.AppendText("Message error! No connection\n");
                break;
                #endregion

            case FrameType.ERR_FILE:
                #region RET_FILE
                Log.AppendText("File error! No connection\n");
                break;
                #endregion
            }
        }
Example #2
0
        public void GetData(int typeId)
        {
            FrameType type = (FrameType)typeId;
            //FrameType frametype = (FrameType)Enum.ToObject(typeof(FrameType), frametypeid);
            int bytesToRead;

            byte[] byteBuffer;
            int    i;

            byte[] ToDecode;
            byte[] Decoded;
            //int parts;
            //string parts_s;
            //WriteLog(DirectionType.INCOMING, frametype);
            Log.Invoke(new EventHandler(delegate
            {
                Log.AppendText("get frame " + type + "\n");
            }));


            switch (type)
            {
            case FrameType.MSG:
                #region MSG
                if (IsConnected())
                {
                    int    n             = Port.BytesToRead;
                    byte[] msgByteBuffer = new byte[n];

                    Port.Read(msgByteBuffer, 0, n);     //считываем сообщение
                    string Message = Encoding.Default.GetString(msgByteBuffer);
                    Log.Invoke(new EventHandler(delegate
                    {
                        Log.AppendText("(" + Port.PortName + ") GetData: new message > " + Message + "\n");
                    }));

                    WriteData(null, FrameType.ACK);
                }
                else
                {
                    WriteData(null, FrameType.RET_MSG);
                }
                break;
                #endregion


            case FrameType.FILE:

                #region FILE
                if (IsConnected())
                {
                    //byte[] byteBuffer;

                    //byte[] size = new byte[10];
                    //Port.Read(size, 0, 10);
                    //string size_s = Encoding.Default.GetString(size);

                    //double ssize = Double.Parse(size_s); //размер файла //нужен ли он вообще /наверное, нужен

                    //int n = Port.BytesToRead;
                    //byteBuffer = new byte[n];
                    //Port.Read(byteBuffer, 0, n);

                    //Log.Invoke(new EventHandler(delegate
                    //{
                    //    Log.AppendText("(" + Port.PortName + ") : GetData: new file > " + byteBuffer.Length + " bytes\n");
                    //}));

                    //WriteData(null, FrameType.ACK);

                    //Port.ReadByte();
                    byte   fileId   = (byte)Port.ReadByte();
                    string typeFile = TypeFileAnalysis(fileId);
                    byte[] size;
                    //byte[] NumOfFrames;
                    string size_s;
                    size = new byte[10];
                    //for ( i = 0; i<size.Length; i++)
                    //{
                    //    size[i] = 0;
                    //}
                    Port.Read(size, 0, 10);
                    size_s = Encoding.Unicode.GetString(size);
                    //NumOfFrames = new byte[10];
                    //for (i = 0; i < NumOfFrames.Length; i++)
                    //{
                    //    NumOfFrames[i] = 0;
                    //}
                    //Port.Read(NumOfFrames, 0, 10);
                    //parts_s = Encoding.Unicode.GetString(NumOfFrames);
                    //parts = int.Parse(parts_s);
                    //MessageBox.Show(spd_s)
                    //double ssize;
                    //ssize = double.Parse(size_s);

                    DialogResult result;
                    result = MessageBox.Show("Файл. Размер: " + size_s + " Кбайт.\nПринять?", "Прием файла", MessageBoxButtons.YesNo);
                    if (result == DialogResult.Yes)
                    {
                        //Decoded = new byte[(int)Math.Ceiling((double)Port.BytesToRead * parts / 2)];

                        //for (int j = 0; j <= parts; j++)
                        //{
                        bytesToRead = Port.BytesToRead;
                        byteBuffer  = new byte[bytesToRead];
                        Port.Read(byteBuffer, 0, bytesToRead);
                        Decoded  = new byte[bytesToRead / 2];
                        ToDecode = new byte[2];
                        ;
                        for (i = 0; i < bytesToRead / 2; i++)
                        {
                            ToDecode[0] = byteBuffer[i * 2];
                            ToDecode[1] = byteBuffer[(i * 2) + 1];
                            Decoded[i]  = Hamming.Decode(ToDecode);
                        }
                        //}
                        SaveFileDialog saveFileDialog = new SaveFileDialog();

                        MainForm.Invoke(new EventHandler(delegate
                        {
                            saveFileDialog.FileName = "";
                            saveFileDialog.Filter   = "TypeFile (*." + typeFile + ")|*." + typeFile + "|All files (*.*)|*.*";
                            if (DialogResult.OK == saveFileDialog.ShowDialog())
                            {
                                File.WriteAllBytes(saveFileDialog.FileName, Decoded);    //!
                                WriteData(null, FrameType.ACK);
                                Display.Invoke(new EventHandler(delegate
                                {
                                    Display.AppendText(
                                        "[" + DateTime.Now + "] : "
                                        + "Файл успешно получен"
                                        + "\r\n");
                                    Display.ScrollToCaret();
                                }));
                            }
                            else
                            {
                                // MessageBox.Show("Отмена ");
                                Display.Invoke(new EventHandler(delegate
                                {
                                    Display.AppendText(
                                        "[" + DateTime.Now + "] : " + ": "
                                        + "Вы не сохранили файл"
                                        + "\r\n");
                                    Display.ScrollToCaret();
                                }));
                            }
                        }));
                    }
                    else
                    {
                        // MessageBox.Show("Отмена ");
                        Display.Invoke(new EventHandler(delegate
                        {
                            Display.AppendText(
                                "[" + DateTime.Now + "] : " + ": "
                                + "Вы не сохранили файл"
                                + "\r\n");
                            Display.ScrollToCaret();
                        }));
                    }
                }
                else
                {
                    WriteData(null, FrameType.RET_FILE);
                }

                break;
                #endregion
            //======================================================



            case FrameType.ACK:
                #region ACK
                break;
                #endregion

            case FrameType.RET_MSG:
                #region RET_MSG
                Log.AppendText("Message error! No connection\n");
                break;
                #endregion

            case FrameType.RET_FILE:
                #region RET_FILE
                Log.AppendText("File error! No connection\n");
                break;
                #endregion
            }
        }
Example #3
0
        public void GetData(int typeId)
        {
            FrameType type = (FrameType)typeId;

            byte[] ToDecode;
            byte[] Decoded;



            switch (type)
            {
            case FrameType.MSG:
                #region MSG
                if (IsConnected())
                {
                    int    n             = Port.BytesToRead;
                    byte[] msgByteBuffer = new byte[n];

                    Port.Read(msgByteBuffer, 0, n);     //считываем сообщение
                    string Message = Encoding.Default.GetString(msgByteBuffer);
                    Log.Invoke(new EventHandler(delegate
                    {
                        Log.AppendText("(" + Port.PortName + ") GetData: новое сообщение > " + Message + "\n");
                    }));

                    WriteData(null, FrameType.ACK);
                }
                else
                {
                    WriteData(null, FrameType.RET_MSG);
                }
                break;

                #endregion
            case FrameType.FILEOK:
                #region FILEOK
                if (IsConnected())
                {
                    int    n             = Port.BytesToRead;
                    byte[] msgByteBuffer = new byte[n];

                    Port.Read(msgByteBuffer, 0, n);     //считываем сообщение
                    string Message = Encoding.Default.GetString(msgByteBuffer);
                    Log.Invoke(new EventHandler(delegate
                    {
                        Log.AppendText("[" + DateTime.Now + "]: Получено предложение на прием файла размером: " + Message + " байт\n");
                    }));
                    //SuccessfulFrameNumber = int.Parse(Message);
                    int    Message_num = int.Parse(Message);
                    double fileSize    = Math.Round((double)Message_num / 1024, 3);
                    if (MessageBox.Show("Получено предложение на прием файла. Размер: " + fileSize.ToString() + " Кбайт.\nПринять?", "Прием файла", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        WriteData("OK", FrameType.ACK);

                        b_ChooseFile.Invoke(new EventHandler(delegate
                        {
                            b_ChooseFile.Enabled = false;
                        }));
                        b_OpenPort.Invoke(new EventHandler(delegate
                        {
                            b_OpenPort.Enabled = false;
                        }));
                    }
                }
                else
                {
                    MessageBox.Show("Нет соединения!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                break;
                #endregion

            case FrameType.FILE:
                while ((!IsConnected()) && (BreakConnection))
                {
                    Port.DiscardInBuffer();
                    Log.Invoke(new EventHandler(delegate
                    {
                        Log.AppendText(
                            "[" + DateTime.Now + "]: "
                            + "Ожидание файла..."
                            + "\r\n");
                        Log.ScrollToCaret();
                        Thread.Sleep(1000);
                    }));
                }
                #region FILE
                if (IsConnected())
                {
                    byte   fileId   = (byte)Port.ReadByte();
                    string typeFile = TypeFileAnalysis(fileId);

                    byte[] size = new byte[sizeLenght];
                    Port.Read(size, 0, sizeLenght);
                    int ssize = (int)Double.Parse(Encoding.Default.GetString(size));

                    byte[] byte_NumOfFrames = new byte[NumOfFrameLenght];
                    Port.Read(byte_NumOfFrames, 0, NumOfFrameLenght);
                    int NumOfFrames = (int)Double.Parse(Encoding.Default.GetString(byte_NumOfFrames));

                    ProgressBar.Invoke(new EventHandler(delegate
                    {
                        ProgressBar.Visible = true;
                        ProgressBar.Maximum = NumOfFrames;
                    }));

                    byte[] byte_FrameNumber = new byte[NumOfFrameLenght];
                    Port.Read(byte_FrameNumber, 0, NumOfFrameLenght);
                    int FrameNumber = (int)Double.Parse(Encoding.Default.GetString(byte_FrameNumber));


                    if (FrameNumber == 1)
                    {
                        file_buffer = new byte[NumOfFrames * (Port.WriteBufferSize - 27)];
                    }

                    Log.Invoke(new EventHandler(delegate
                    {
                        Log.AppendText(
                            "[" + DateTime.Now + "]: "
                            + "Загружен кадр "
                            + FrameNumber.ToString()
                            + "\r\n");
                        Log.ScrollToCaret();
                    }));
                    int    n       = Port.WriteBufferSize - InfoLen;
                    byte[] newPart = new byte[n];
                    Port.Read(newPart, 0, n);

                    newPart.CopyTo(file_buffer, n * (FrameNumber - 1));
                    if (ProgressBar.Value != FrameNumber & ProgressBar.Value != ProgressBar.Maximum)
                    {
                        ProgressBar.Invoke(new EventHandler(delegate
                        {
                            ProgressBar.Value++;
                        }));
                    }
                    WriteData(FrameNumber.ToString(), FrameType.FRAME);

                    if (FrameNumber == NumOfFrames)
                    {
                        Decoded  = new byte[ssize];
                        ToDecode = new byte[2];

                        for (int i = 0; i < ssize; i++)
                        {
                            ToDecode[0] = file_buffer[i * 2];
                            ToDecode[1] = file_buffer[(i * 2) + 1];
                            Decoded[i]  = Hamming.Decode(ToDecode);
                        }
                        Log.Invoke(new EventHandler(delegate
                        {
                            Log.AppendText(
                                "[" + DateTime.Now + "]: "
                                + "Файл успешно получен"
                                + "\r\n");
                            Log.ScrollToCaret();
                            b_ChooseFile.Enabled = true;
                            b_OpenPort.Enabled   = true;
                        }));

                        SaveFileDialog saveFileDialog = new SaveFileDialog();

                        MainForm.Invoke(new EventHandler(delegate
                        {
                            saveFileDialog.FileName = "";
                            saveFileDialog.Filter   = "TypeFile (*." + typeFile + ")|*." + typeFile + "|All files (*.*)|*.*";
                            if (DialogResult.OK == saveFileDialog.ShowDialog())
                            {
                                File.WriteAllBytes(saveFileDialog.FileName, Decoded);
                                //WriteData(null, FrameType.ACK);
                                Log.Invoke(new EventHandler(delegate
                                {
                                    Log.AppendText(
                                        "[" + DateTime.Now + "]: "
                                        + "Файл сохранен"
                                        + "\r\n");
                                    Log.ScrollToCaret();
                                    b_ChooseFile.Enabled = true;
                                    b_OpenPort.Enabled   = true;
                                }));
                            }
                            else
                            {
                                // MessageBox.Show("Отмена ");
                                Log.Invoke(new EventHandler(delegate
                                {
                                    Log.AppendText(
                                        "[" + DateTime.Now + "]: "
                                        + "Вы не сохранили файл"
                                        + "\r\n");
                                    Log.ScrollToCaret();
                                }));
                            }
                        }));
                        ProgressBar.Invoke(new EventHandler(delegate
                        {
                            ProgressBar.Value = 0;
                        }));
                    }
                }
                else
                {
                    WriteData(null, FrameType.ERR_FILE);
                }

                break;
                #endregion
            //======================================================

            case FrameType.ACK:
                #region ACK
                WriteData(FilePath, FrameType.FILE);
                break;
                #endregion

            case FrameType.RET_MSG:
                #region RET_MSG
                Log.AppendText("Ошибка отправки! Нет соединения\n");
                break;
                #endregion

            case FrameType.ERR_FILE:
                #region RET_FILE
                Log.AppendText("Ошибка отправки файла! Нет соединения\n");
                break;
                #endregion
            }
        }
Example #4
0
        public void WriteData(string input, FrameType type)
        //пока считаем, что input строка символов
        {
            byte[] Header = { STARTBYTE, (byte)type };
            byte[] BufferToSend;
            byte[] Telegram;

            //Я добавил:
            //byte[] Header = { STARTBYTE, receiver, (byte)type, sender };
            //byte[] BufferToSend;
            byte[] spd;
            byte[] size;
            byte[] ByteToEncode;
            byte[] ByteEncoded;
            byte[] NumOfFrames;
            byte[] fileId = { 0 };
            int    i;
            string result_s;

            switch (type)
            {
            case FrameType.MSG:
                #region MSG
                if (IsConnected())
                {
                    // Telegram[] = Coding(input);
                    Telegram = Encoding.Default.GetBytes(input);              //потом это кыш

                    BufferToSend = new byte[Header.Length + Telegram.Length]; //буфер для отправки = заголовок+сообщение
                    Header.CopyTo(BufferToSend, 0);
                    Telegram.CopyTo(BufferToSend, Header.Length);

                    Port.Write(BufferToSend, 0, BufferToSend.Length);
                    Log.AppendText("(" + Port.PortName + ") WriteData: sent message >  " + Encoding.Default.GetString(Telegram) + "\n");
                }
                break;
                #endregion

            case FrameType.END:
                if (IsConnected())
                {
                    // Telegram[] = Coding(input);
                    Telegram = Encoding.Default.GetBytes(input);              //потом это кыш

                    BufferToSend = new byte[Header.Length + Telegram.Length]; //буфер для отправки = заголовок+сообщение
                    Header.CopyTo(BufferToSend, 0);
                    Telegram.CopyTo(BufferToSend, Header.Length);

                    Port.Write(BufferToSend, 0, BufferToSend.Length);
                    Log.AppendText("(" + Port.PortName + ") WriteData: sent message >  " + Encoding.Default.GetString(Telegram) + "\n");
                }
                break;

            case FrameType.FILE:
                #region FILE
                if (IsConnected())
                {
                    ByteToEncode = File.ReadAllBytes(@input);
                    size         = new byte[10];
                    //MessageBox.Show(((double)ByteToEncode.Length / 1048576).ToString());
                    size = Encoding.Unicode.GetBytes(((double)ByteToEncode.Length / 1024).ToString());     //1048576 байт = 1 Мбайт
                    //size = Encoding.Default.GetBytes((input.Length).ToString());
                    ByteEncoded = new byte[ByteToEncode.Length * 2];
                    i           = 0;

                    string typeFile = @input.Split('.')[1];
                    fileId[0] = TypeFile_to_IdFile(typeFile);

                    Display.AppendText("Длина ByteToEncode:" + ByteToEncode.Length + "\n");
                    foreach (byte item in ByteToEncode)
                    {
                        Hamming.HammingEncode74(ByteToEncode[i]).CopyTo(ByteEncoded, i * 2);
                        i++;
                        //Display.AppendText(i / ByteToEncode.Length * 100 + ", ");


                        //loading.progressBar1.Increment(i / ByteToEncode.Length * 100);
                    }
                    byte[] ToDecode = new byte[2];
                    byte[] Decoded  = new byte[ByteEncoded.Length / 2];

                    for (int m = 0; m < ByteEncoded.Length / 2; m++)
                    {
                        ToDecode[0] = ByteEncoded[m * 2];
                        ToDecode[1] = ByteEncoded[(m * 2) + 1];
                        Decoded[m]  = Hamming.Decode(ToDecode);
                    }
                    result_s = Encoding.UTF8.GetString(Decoded);                                                            // Сюда для проверки сохраняется раскодированный файл
                    //double parts;
                    //byte[] ToDecode;
                    //byte[] Decoded;
                    //byte[] byteBuffer;
                    //Decoded = new byte[ByteEncoded.Length / 2];
                    //ToDecode = new byte[2];
                    //byteBuffer = new byte[ByteEncoded.Length];
                    //for (int m = 0; m < ByteEncoded.Length / 2; m++)
                    //{
                    //    ToDecode[0] = ByteEncoded[m * 2];
                    //    ToDecode[1] = ByteEncoded[(m * 2) + 1];
                    //    Decoded[m] = Hamming.Decode(ToDecode);
                    //}
                    //string Decoded_decoded = Encoding.UTF8.GetString(Decoded);
                    //parts = (int)Math.Ceiling((double)ByteEncoded.Length / (double)(Port.WriteBufferSize - Header.Length - fileId.Length - 10));
                    //NumOfFrames = Encoding.Unicode.GetBytes((parts).ToString());
                    if (Header.Length + fileId.Length + ByteEncoded.Length + 8 < Port.WriteBufferSize)
                    {
                        BufferToSend = new byte[Header.Length + fileId.Length + 10 + ByteEncoded.Length];    //!
                        Header.CopyTo(BufferToSend, 0);
                        fileId.CopyTo(BufferToSend, Header.Length);
                        size.CopyTo(BufferToSend, Header.Length + fileId.Length);
                        //NumOfFrames.CopyTo(BufferToSend, Header.Length + fileId.Length + size.Length);
                        ByteEncoded.CopyTo(BufferToSend, Header.Length + fileId.Length + 10 /*+ NumOfFrames.Length*/);    //!
                        bool flag = false;
                        while (!flag)
                        {
                            //Application.DoEvents();
                            if (MessageBox.Show("Send?", "Test", MessageBoxButtons.YesNo) == DialogResult.Yes)
                            {
                                flag = true;
                                Port.Write(BufferToSend, 0, BufferToSend.Length);
                                //loading.Hide();
                                MessageBox.Show("Готово!");
                                //loading.progressBar1.Value = 0;
                                //loading.i = 1;
                            }
                            else
                            {
                                flag = true;
                                //loading.Hide();
                                //loading.progressBar1.Value = 0;
                                MessageBox.Show("Вы отменили передачу файла.");
                                // loading.i = 1;
                            }
                        }
                    }
                    else
                    {
                        double parts;
                        int    EncodedByteIndex;
                        int    Part_ByteEncodedIndex;

                        parts = (double)ByteEncoded.Length / (double)(Port.WriteBufferSize /*- Header.Length - fileId.Length - 10*/);
                        MessageBox.Show(Port.WriteBufferSize.ToString() + " " + parts.ToString() + "\n" + ((int)Math.Ceiling(parts)).ToString());
                        for (i = 0; i <= (int)Math.Ceiling(parts); i++)
                        {
                            BufferToSend = new byte[Port.WriteBufferSize];    //!
                            Header.CopyTo(BufferToSend, 0);
                            fileId.CopyTo(BufferToSend, Header.Length);
                            size.CopyTo(BufferToSend, Header.Length + fileId.Length);
                            byte[] Part_ByteEncoded;
                            byte[] Last_Part;
                            Part_ByteEncoded      = new byte[Port.WriteBufferSize - Header.Length - fileId.Length - 10];
                            EncodedByteIndex      = i * (Port.WriteBufferSize - Header.Length - fileId.Length - 10);
                            Part_ByteEncodedIndex = (Port.WriteBufferSize - Header.Length - fileId.Length - 10);
                            if (((ByteEncoded.Length - EncodedByteIndex) >= Part_ByteEncodedIndex))
                            {
                                Array.ConstrainedCopy(ByteEncoded, EncodedByteIndex, Part_ByteEncoded, 0, Part_ByteEncodedIndex);
                                ToDecode = new byte[2];
                                Decoded  = new byte[Part_ByteEncoded.Length / 2];

                                for (int m = 0; m < Part_ByteEncoded.Length / 2; m++)
                                {
                                    ToDecode[0] = Part_ByteEncoded[m * 2];
                                    ToDecode[1] = Part_ByteEncoded[(m * 2) + 1];
                                    Decoded[m]  = Hamming.Decode(ToDecode);
                                }
                                result_s = Encoding.UTF8.GetString(Decoded);                                  // Сюда для проверки сохраняется раскодированная посылаемая часть файла
                                Part_ByteEncoded.CopyTo(BufferToSend, Header.Length + fileId.Length + 10);    //!
                            }
                            else if (ByteEncoded.Length - EncodedByteIndex > 0)
                            {
                                Last_Part = new byte [ByteEncoded.Length - i * Port.WriteBufferSize];
                                Array.ConstrainedCopy(ByteEncoded, EncodedByteIndex, Last_Part, 0, ByteEncoded.Length - i * Port.WriteBufferSize);
                                Last_Part.CopyTo(BufferToSend, Header.Length + fileId.Length + 10);    //!
                                Port.Write(BufferToSend, 0, BufferToSend.Length);

                                break;
                            }

                            Port.Write(BufferToSend, 0, BufferToSend.Length);
                        }
                    }

                    //WriteData("EOF", FrameType.END);
                }
                break;
                #endregion

            default:
                if (IsConnected())
                {
                    Port.Write(Header, 0, Header.Length);
                }
                break;
            }

            //Зачем такая конструкция?
            Log.Invoke(new EventHandler(delegate
            {
                Log.AppendText("sent frame " + type + "\n"); //всё записываем, мы же снобы
            }));
        }