九宫格AOI视野管理_第五章
回到场景相关的BattleStage逻辑,TickStage函数接口,后续会在while循环中,不断调用; 其中的具体逻辑,首先是调用RandomServerAI函数接口,让服务器创建的Entity实体,任意移动; 然后,从enterOPQue队列中,出队,获取新加入的Entity实体,调用aoicell地图方块的EnterCell接口,完成实体的加入方块; 然后,调用BattleEntity的OnEnterStage接口,设置枚举PlayerStateEnum的变量,是Online在线即可;
继续,遍历当前所有的地图cell方块,发送地图相关的,消息包,到对应的Entity实体; moveOPQue移动队列,完成实体出队,再调用aoi管理器的UpdatePos更新,实体的移动位置即可; 最后,再调用aoi管理器的CalcAOIUpdate函数接口,完成cell地图方块的哈希表容器,数据增删操作逻辑,完成cell方块的数据处理,合并融合;
在服务器的逻辑根类,会开始调用,之前解析过的,服务器相关逻辑; 这俩uint整型,分别对应的是,服务器创建Entity实体、客户端创建Entity实体,它们的唯一uid,都是从1000开始自增计算;
服务器根类逻辑,也是对应弄一个Instance单例,还声明和初始化了,通用异步的AsyncNet服务器连接、消息包的ConcurrentQueue线程安全队列packQue,场景stage、和一个复用的random随机数
初始化函数,就是当前机器的ip和端口传参,开启服务器,和InitStage实例化场景,完成初始配置
AddMsgPack函数接口,是往消息包队列,完成,网络消息包pack入队的操作; CreateServerEntity函数接口,就是基于边界border区间内,随机创建一个服务器Entity实体,最后也是调用stage场景的EnterStage接口,加入场景即可;
这是玩家发送登录请求后,服务器对应的处理,LoginStage函数接口,是创建一个,对应unity客户端实例化出来的,Entity实体,也是调用stage场景的EnterStage接口,加入场景即可; 发送RspLogin协议的消息回包,给unity客户端;
Tick函数接口,在while循环中,判断消息队列是否不为空,如果不为空,就switch拿到对应的协议号,进入不同的case逻辑; 如果是ReqLogin登录请求,就调用上述解析的,LoginStage登录接口; 如果是SndMovePos,玩家个体移动请求,就调用场景的MoveEntity移动接口; 如果是SndExit,玩家个体的退出请求,也是调用,场景的Exit退出游戏接口即可; 最后,会调用场景的TickStage接口;
开启服务器的Main主函数,是通过Task完成服务根逻辑的Init初始化; 在while死循环中,不断调用,根节点的Tick逻辑; 需要注意的是,服务器在监听键盘输入ReadLine,监听,如果输入monsterCount是int整型数字; 如果不为0,就会进入到,Task的whil循环中,创建任意的,服务器Entity实体,用于测试;