private void Desrialize(byte[] bytes, out int messageID, out byte seriousIndex, out byte[] dataBytes) { int offsetIndex = 0; messageID = BitConverter.ToInt32(bytes, offsetIndex); offsetIndex += sizeof(int); seriousIndex = bytes[offsetIndex]; offsetIndex += sizeof(byte); if (bytes.Length - 1 > offsetIndex) { MessageCompressType compressType = (MessageCompressType)bytes[offsetIndex]; offsetIndex += sizeof(byte); MessageCryptoType cryptoType = (MessageCryptoType)bytes[offsetIndex]; offsetIndex += sizeof(byte); dataBytes = new byte[bytes.Length - offsetIndex]; Array.Copy(bytes, offsetIndex, dataBytes, 0, dataBytes.Length); dataBytes = netHandler.DecodeMessage(cryptoType, dataBytes); dataBytes = netHandler.UncompressMessage(compressType, dataBytes); } else { dataBytes = null; } }