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 }