Esempio n. 1
0
        public Packet(ReadOnlySpan <byte> bf)
        {
            if (bf.Length < HeaderSize)
            {
                throw new IndexOutOfRangeException();
            }

            int packetSize = 0;

            fixed(byte *pinnedBuffer = &MemoryMarshal.GetReference(bf))
            packetSize = CalculatePacketSize(pinnedBuffer);

            if (packetSize < HeaderSize)
            {
                throw new IndexOutOfRangeException();
            }

            buffPtr = (byte *)Marshal.AllocHGlobal(packetSize);

            fixed(byte *pinnedBuffer = &MemoryMarshal.GetReference(bf))
            Buffer.MemoryCopy(pinnedBuffer, buffPtr, packetSize, packetSize);

            _pHeader = *(packetHeader *)(buffPtr);
            Seek(0, SeekOrigin.Begin);
        }
Esempio n. 2
0
        public Packet(packetHeader header)
        {
            _pHeader = header;

            int packetSize = Size;

            if (packetSize < HeaderSize)
            {
                throw new IndexOutOfRangeException();
            }

            buffPtr = (byte *)Marshal.AllocHGlobal(packetSize);
            new Span <byte>(buffPtr, packetSize).Fill(0);

            *(packetHeader *)(buffPtr) = _pHeader;
            Seek(0, SeekOrigin.Begin);
        }
Esempio n. 3
0
        public Packet(byte[] bf)
        {
            if (bf.Length < HeaderSize)
            {
                throw new IndexOutOfRangeException();
            }

            int packetLenght = 0;

            fixed(byte *pinnedBuffer = bf)
            packetLenght = CalculatePacketSize(pinnedBuffer);

            if (packetLenght < HeaderSize)
            {
                throw new IndexOutOfRangeException();
            }

            buffPtr = (byte *)Marshal.AllocHGlobal(packetLenght);

            Marshal.Copy(bf, 0, (IntPtr)buffPtr, packetLenght);

            _pHeader = *(packetHeader *)(buffPtr);
            Seek(0, SeekOrigin.Begin);
        }