예제 #1
0
    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!");
        }
    }
예제 #2
0
    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);
    }