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);
    }
    public void SendCommand(int protocol, int extra, BasePacketData data)
    {
        TcpPacket sendPacket = new TcpPacket();

        sendPacket.Initialize();
        data.Serialize(sendPacket);
        sendPacket.SetHeader(protocol, extra);

        #region 수정 전
        this.Connector.SendPacket(sendPacket);
        #endregion

        #region 쓰레드로 따로 빼서 전송
        //this.sendLocker.Lock();
        //this.sendQueue.Enqueue(sendPacket);
        //this.sendLocker.Unlock();
        #endregion
    }