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); }
//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; } } }