public void OnRecv(byte[] buffer, int offset) { CNetData data = new CNetData(); data.Prepare(buffer, offset); SGTMsgHeader head = new SGTMsgHeader(); head.Decode(data); CMessage msg = Decode((ushort)head.wMsgID, data); //Debug.Log("Recv=" + msg.GetType().ToString()); if (msg != null) { lock (m_lock) { m_MessageList.Add(msg); } } else { Debug.Log(head.wMsgID.ToString() + " Decode Failed!"); } }
public CNetData Encode(CMessage msg) { ushort id = msg.GetID(); CNetData data = new CNetData(4096); SGTMsgHeader head = new SGTMsgHeader(); head.wMsgID = id; head.Encode(data); EncoderFunc pfnEncode = FindEncodeFunc(id); if (null == pfnEncode) { return(null); } if (-1 == pfnEncode(msg, ref data)) { return(null); } head.wDataLen = (ushort)(data.GetDataLen() - 8); head.wCheckSum = (ushort)((head.wDataLen ^ 0xBBCC) & 0x88AA); data.Replace(0, BitConverter.GetBytes(CNetData.Inverse(head.wCheckSum))); data.Replace(4, BitConverter.GetBytes(CNetData.Inverse(head.wDataLen))); return(data); }