//! 逻辑处理,转发消息到logic service public void RouteLogicMsg(ClientInfo cinfo, UInt16 cmd, byte[] strMsg, bool first) { RouteLogicMsgReq msg = new RouteLogicMsgReq() { SessionId = cinfo.sessionID, Cmd = (Int16)cmd, Body = strMsg }; if (first) { msg.SessionIp = cinfo.sockObj.GetIP(); } m_ffrpc.Call(cinfo.strAllocWorker, msg); }
public EmptyMsgRet OnRouteLogicMsgReq(RouteLogicMsgReq reqMsg) { int cmd = reqMsg.Cmd; Int64 nSessionID = reqMsg.Session_id; FFLog.Trace(string.Format("worker RouteLogicMsgReq! {0} {1}", cmd, nSessionID)); if (m_dictCmd2Func.ContainsKey(cmd) == false) { FFLog.Error(string.Format("worker cmd invalid! {0}", cmd)); return(RPC_NONE); } if (cmd == (int)Pbmsg.ClientCmdDef.CLogin) { Player playerOld = getPlayerBySessionID(nSessionID); if (playerOld != null) { ClosePlayer(playerOld); if (playerOld.nSessionID == nSessionID) { m_dictRoles.Remove(nSessionID); FFLog.Error(string.Format("worker cmd invalid! {0} {1} login twice", cmd, nSessionID)); return(RPC_NONE); } } else { Player playerNew = new Player() { nSessionID = nSessionID }; m_dictRoles[nSessionID] = playerNew; } } else { if (m_dictRoles.ContainsKey(nSessionID) == false) { FFLog.Error(string.Format("worker cmd invalid! {0}, have not recv login msg", cmd)); return(RPC_NONE); } } Player player = getPlayerBySessionID(nSessionID); m_dictCmd2Func[cmd](player, reqMsg.Body); return(RPC_NONE); }
public EmptyMsgRet OnRouteLogicMsgReq(RouteLogicMsgReq reqMsg) { Int64 nBeginUs = DateTime.Now.Ticks / 10; int cmd = reqMsg.Cmd; if ((cmd & 0x4000) != 0) { cmd &= ~(0x4000); } Int64 nSessionID = reqMsg.SessionId; if (m_dictCmd2Func.ContainsKey(cmd) == false) { FFLog.Error(string.Format("worker cmd invalid! {0}", cmd)); return(RPC_NONE); } CmdRegInfo cmdRegInfo = m_dictCmd2Func[cmd]; cmdRegInfo.cmdHandler(nSessionID, reqMsg.Cmd, reqMsg.Body); PerfMonitor.Instance().AddPerf(string.Format("cmd={0}", cmdRegInfo.cmdName), DateTime.Now.Ticks / 10 - nBeginUs); return(RPC_NONE); }
public EmptyMsgRet OnRouteLogicMsgReq(RouteLogicMsgReq reqMsg) { int cmd = reqMsg.Cmd; Int64 nSessionID = reqMsg.SessionId; //FFLog.Trace(string.Format("worker RouteLogicMsgReq! {0} {1}", cmd, nSessionID)); bool bIsYuanShenMsg = false; if ((cmd & 0x4000) != 0) { cmd &= ~(0x4000); bIsYuanShenMsg = true; } if (m_dictCmd2Func.ContainsKey(cmd) == false) { FFLog.Error(string.Format("worker cmd invalid! {0}", cmd)); return(RPC_NONE); } if (cmd == (int)Pbmsg.ClientCmdDef.CLogin) { Player playerOld = GetPlayerBySessionID(nSessionID); if (playerOld != null) { ClosePlayer(playerOld); if (playerOld.nSessionID == nSessionID) { m_dictRoles.Remove(nSessionID); FFLog.Error(string.Format("worker cmd invalid! {0} {1} login twice", cmd, nSessionID)); return(RPC_NONE); } } else { Player playerNew = new Player() { nSessionID = nSessionID }; m_dictRoles[nSessionID] = playerNew; } } else { if (m_dictRoles.ContainsKey(nSessionID) == false) { FFLog.Error(string.Format("worker cmd invalid! {0}, have not recv login msg", cmd)); return(RPC_NONE); } } Player player = GetPlayerBySessionID(nSessionID); if (bIsYuanShenMsg) { if (null == player.playerYS) { FFLog.Error(string.Format("playerYS invalid", cmd)); return(RPC_NONE); } m_dictCmd2Func[cmd](player.playerYS, reqMsg.Body); } else { m_dictCmd2Func[cmd](player, reqMsg.Body); } return(RPC_NONE); }