Example #1
0
 public bool LuaInternalSendMsg(byte[] msg, int cmd, NetworkResponseMethod onFinish, LuaNetError onError)
 {
     if (cmd == (int)this.luaCmdSend &&
         Mathf.Abs(Time.realtimeSinceStartup - this.sendTime) < 0.4f)
     {
         Debug.Log("Skip repeated message in short interval");
         return(false);
     }
     this.luaMsgBytes = msg;
     this.luaCmdSend  = (MessageID)cmd;
     this.luaOnFinish = onFinish;
     this.luaError    = onError;
     LuaSend();
     return(true);
 }
Example #2
0
    //public ResultID err = ResultID.RET_SUCCESS;
    private void ScanMSGs()
    {
        // Debug.LogError("ScanMSGs()");
        while (ringBuf.Size != 0)
        {
            //Console.Log("ScanMSGs: " + sending);

            //Waiting.Instance.Hide();

            byte[] lengthByte = new byte[sizeof(int)];
            //ringBuf.CopyTo(0, lengthByste, 0, lengthByte.Length);
            //ushort wdMagic = BitConverter.ToUInt16(lengthByte, 0);

            ringBuf.CopyTo(0, lengthByte, 0, lengthByte.Length);


            int msgLength = BitConverter.ToInt32(lengthByte, 0);
            msgLength = NetworkToHostOrder(msgLength);

            if (ringBuf.Size >= msgLength && msgLength >= 6)
            {
                byte[] msgdata = new byte[msgLength];
                ringBuf.Get(msgdata);
                //int realLength = ringBuf.Get(msgdata);
                //Console.Assert(realLength == msgLength);

                using (MemoryStream stream = new MemoryStream(msgdata))
                {
                    BinaryReader br     = new BinaryReader(stream);
                    ClientHeader header = new ClientHeader();

                    header.m_iPackageLength = NetworkToHostOrder(br.ReadInt32());
                    header.m_iUin           = NetworkToHostOrder(br.ReadInt32());
                    header.m_iMessageID     = NetworkToHostOrder(br.ReadInt16());
                    header.m_iSequenceID    = NetworkToHostOrder(br.ReadInt32());

                    int    body_len = msgLength - 14;
                    byte[] data     = br.ReadBytes(body_len);

                    NetworkMsg msg = new NetworkMsg();
                    msg.header = header;
                    msg.data   = data;


                    //msgList.Add(msg);

                    cmdRcv = (MessageID)msg.header.m_iMessageID;

                    string cmdstr = Enum.GetName(typeof(MessageID), cmdRcv);

                    if (string.IsNullOrEmpty(cmdstr))
                    {
                        LOG.Error("客户端版本错误!! " + cmdRcv);
                        LuaCheckErr(cmdRcv);
                        return;
                    }

                    // 心跳包不显示
                    if (cmdRcv != MessageID.CMD_HEART_BEAT_RSP)
                    {
                        LOG.Log("Receive MSG: " + msg + "  " + cmdstr + "\n");
                    }


                    Type type = typeof(Network);

                    if (!ResponseMap.ContainsKey(cmdRcv))
                    {
                        MethodInfo mi = type.GetMethod(cmdstr);
                        if (mi == null)
                        {
                            LOG.Error("Can not find MSG RSP Function: " + cmdstr);
                            continue;
                        }

                        NetworkResponseMethod dele = Delegate.CreateDelegate(typeof(NetworkResponseMethod), null, mi) as NetworkResponseMethod;

                        ResponseMap.Add(cmdRcv, dele);
                    }

                    try
                    {
                        if (ResponseMap.ContainsKey(cmdRcv) && ResponseMap[cmdRcv] != null)
                        {
#if xue
#else
                            //   Debug.LogError("lua send: " + luaCmdSend +" val: "+(int)luaCmdSend+ " cmdRcv: " + cmdRcv+" val: "+(int)cmdRcv);
                            if ((int)cmdRcv == (int)luaCmdSend + 1)
                            {
                                LuaRcvMsg(cmdRcv, msg);
                            }
#endif
                            //if (!HotfixManager.Instance.TryFixNet(HotfixMode.BEFORE, (uint)cmdRcv, msg))
                            {
                                ResponseMap[cmdRcv](msg);
                                //HotfixManager.Instance.TryFixNet(HotfixMode.AFTER, (uint)cmdRcv, msg);
                            }
                        }
                        if (onMSGDeserialized != null)
                        {
                            onMSGDeserialized(cmdRcv);
                        }
                    }
                    catch (System.Exception ex)
                    {
                        LOG.Error("RSP MSG ERR : " + ex);
                    }
                }
            }
            else
            {
                break;
            }
        }
    }