Пример #1
0
        //! 逻辑处理,转发消息到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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }