public TcpPacket DeserializePacket(StreamBuffer streamBuffer)
    {
        TcpPacketHeader packetHeader     = DeserializeHeader(streamBuffer);
        int             packetDataLength = packetHeader.length - Defines.PACKET_HEADER_LENGTH;

        TcpPacket packet = new TcpPacket();

        byte[] dataBuffer = new byte[packetDataLength];
        Array.Copy(streamBuffer.Buffer, Defines.PACKET_HEADER_LENGTH, dataBuffer, 0, packetDataLength);

        packet.Initialize(dataBuffer, packetDataLength);
        packet.SetHeader(packetHeader);

        if (streamBuffer.RemainLength - packetHeader.length > 0)
        {
            Array.Copy(streamBuffer.Buffer, packetHeader.length,
                       streamBuffer.Buffer, 0, streamBuffer.RemainLength - packetHeader.length);
        }

        int remainLength = streamBuffer.RemainLength;

        remainLength -= packetHeader.length;
        streamBuffer.RemainLength = remainLength;

        if (streamBuffer.RemainLength <= 0)
        {
            remainLength = 0;
            Array.Clear(streamBuffer.Buffer, 0, streamBuffer.Buffer.Length);
        }

        return(packet);
    }
Exemple #2
0
    public void SetHeader(int protocol, int extra)
    {
        TcpPacketHeader header = new TcpPacketHeader();

        header.length   = Defines.PACKET_HEADER_LENGTH + this.stream.Offset;
        header.protocol = protocol;
        header.extra    = extra;
        this.header     = header;
    }
    public TcpPacketHeader DeserializeHeader(StreamBuffer streamBuffer)
    {
        TcpPacketHeader header = new TcpPacketHeader();

        header.length   = BitConverter.ToInt32(streamBuffer.Buffer, 0);
        header.protocol = BitConverter.ToInt32(streamBuffer.Buffer, 4);
        header.extra    = BitConverter.ToInt32(streamBuffer.Buffer, 8);

        return(header);
    }
    public byte[] SerializeHeader(TcpPacket packet)
    {
        byte[] data = new byte[Defines.PACKET_HEADER_LENGTH];

        TcpPacketHeader header = packet.header;

        Array.Copy(BitConverter.GetBytes(header.length), 0, data, 0, 4);
        Array.Copy(BitConverter.GetBytes(header.protocol), 0, data, 4, 4);
        Array.Copy(BitConverter.GetBytes(header.extra), 0, data, 8, 4);

        return(data);
    }
    public bool IsMakePacket(StreamBuffer streamBuffer)
    {
        if (streamBuffer.RemainLength >= Defines.PACKET_HEADER_LENGTH)
        {
            TcpPacketHeader header = DeserializeHeader(streamBuffer);

            if (header.length > Defines.MAX_BUFFER_LENGTH || header.length <= 0)
            {
                // 패킷의 길이가 이상하면 잘못된 패킷
                streamBuffer.RemainLength = 0;
                return(false);
            }

            if (streamBuffer.RemainLength >= header.length)
            {
                return(true);
            }
        }

        return(false);
    }
Exemple #6
0
 public void SetHeader(TcpPacketHeader header)
 {
     this.header = header;
 }