Пример #1
0
        // Конуструктор приемник
        public Packet(Header header, byte[] data)
        {
            //TO DO: Валидация входных данных
             Header = header;

             Header.DataLenght = (ushort)data.Length;

             // Разархивирование данных
             var unZipData = Compressor.Unzip(data);

             // Создание объекта данных
             Data = StructConvertor.FromBytes<Data>(unZipData);

             // Запись архивированных данных для отправки подверждения
             ByteData = data;

             // Контрольная сумма высчитывется по  | Получатель | Отправитель | Длинна данных |  Опции   | + Данные
             // Без учета сигнатуры                |   1 байт   |   1 байт    |    2 байта    | 2 байта  |

             _packetForCrc = new byte[6 + Header.DataLenght];
             _packetForCrc[0] = Header.Recipient;
             _packetForCrc[1] = Header.Sender;
             Array.Copy(BitConverter.GetBytes(Header.DataLenght), 0, _packetForCrc, 2, 2);
             _packetForCrc[4] = Header.Option1Byte;
             _packetForCrc[5] = Header.Option2Byte;
             Array.Copy(ByteData, 0, _packetForCrc, 6, Header.DataLenght);

             Header.Crc = Crc16.ComputeChecksum(_packetForCrc);

             // Массив для отправки
             _packet = new byte[10 + Header.DataLenght];
        }
Пример #2
0
        // Конструктор передатчик
        public Packet(Header header, object data)
        {
            Data = new Data(DataType.Error, StructConvertor.GetBytes(data));

            if (data is Text)
            {
                Data.Type = DataType.Text;
            }

            if (data is BroadcastText)
            {
                Data.Type = DataType.BroadcastText;
            }

            if (data is FileRequest)
            {
                Data.Type = DataType.FileRequest;
            }

            if (data is FileData)
            {
                Data.Type = DataType.FileData;
            }

            if (data is InitializationData)
            {
                Data.Type = DataType.Initialization;
            }

            ByteData = Compressor.Zip(StructConvertor.GetBytes(Data));

            Header = header;

            Header.DataLenght = (ushort)ByteData.Length;

            // Контрольная сумма высчитывется по  | Получатель | Отправитель | Длинна данных |  Опции   | + Данные
            // Без учета сигнатуры                |   1 байт   |   1 байт    |    2 байта    | 2 байта  |

            _packetForCrc = new byte[6 + Header.DataLenght];
            _packetForCrc[0] = Header.Recipient;
            _packetForCrc[1] = Header.Sender;
            Array.Copy(BitConverter.GetBytes(Header.DataLenght), 0, _packetForCrc, 2, 2);
            _packetForCrc[4] = Header.Option1Byte;
            _packetForCrc[5] = Header.Option2Byte;
            Array.Copy(ByteData, 0, _packetForCrc, 6, Header.DataLenght);

            Header.Crc = Crc16.ComputeChecksum(_packetForCrc);

            // Массив для отправки
            _packet = new byte[10 + Header.DataLenght];
        }