public bool IsTranscoderEncode(byte[] bytes) { if (bytes == null || bytes.Length < 2) { return(false); } byte[] b = new byte[2]; Array.Copy(bytes, 0, b, 0, b.Length); if (ByteArrayUtil.bytesToShort(b) == MAGIC_NUMBER) { return(true); } return(false); }
private int DecodeGamePackage(int index, int size) { m_bIsWaitingPkgComplete = false; int initIndex = index; if (IsOutOfSize(index, size, 4)) { m_bIsWaitingPkgComplete = true; return(initIndex); } //decode message id int messageId = ByteArrayUtil.bytesToInt(m_DecodingBuffer.ToArray(), index); index += 4; if (IsOutOfSize(index, size, 4)) { m_bIsWaitingPkgComplete = true; return(initIndex); } //skip header index += 4; if (IsOutOfSize(index, size, 2)) { m_bIsWaitingPkgComplete = true; return(initIndex); } short headerLength = ByteArrayUtil.bytesToShort(m_DecodingBuffer.ToArray(), index); index += 2; if (IsOutOfSize(index, size, headerLength)) { m_bIsWaitingPkgComplete = true; return(initIndex); } //skip header index += headerLength; if (IsOutOfSize(index, size, 4)) { m_bIsWaitingPkgComplete = true; return(initIndex); } //get message length int messageLength = ByteArrayUtil.bytesToInt(m_DecodingBuffer.ToArray(), index); index += 4; if (IsOutOfSize(index, size, messageLength)) { m_bIsWaitingPkgComplete = true; return(initIndex); } byte[] messageBody = new byte[messageLength]; Array.Copy(m_DecodingBuffer.ToArray(), index, messageBody, 0, messageLength); //update index index += messageLength; TBase message = null; Type tmpType; if (!m_MessageMapIdToType.TryGetValue(messageId, out tmpType)) { Debug.LogError("Can't decode message " + messageId); //return -1; return(index); } message = Activator.CreateInstance(tmpType) as TBase; ThriftSerialize.DeSerialize(message, messageBody); //broad cast MessageDispatcher.Instance.BroadcastMessage(new MessageObject(messageId, message)); Debug.Log("Rec msg:" + message.ToString()); return(index); }