版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/themagickeyjianan/article/details/88748557
背景: 捡宝项目是属于服务器同步计算客户端位置,玩家在场景服务器进行请求,服务器计算,广播给玩家
1)场景服务器area
area/handler-->playerHandler.js
玩家进入场景:
PlayerHandler.prototype.enterScene = function (msg, session, next)
玩家请求移动
PlayerHandler.prototype.move = function (msg, session, next) { // 客户端在地图中朝着目标移动
玩家请求获取当前任务角色的动画信息
PlayerHandler.prototype.getAnimation = function (msg, session, next) {
area/remote-->playerRemote.js
还是那句话,remote里面的东西是给前端服务器远程调用使用的,如这里玩家进入场景后,被迫掉线,那么就需要清理玩家在场景中的状态信息
玩家离开场景服务器
PlayerRemote.prototype.playerLeave = function(args, cb) {
var areaId = args.areaId; // 哪个玩家离开哪个地图根据id标识
var playerId = args.playerId;
var player = this.areaService.getPlayer(playerId);
if (!player) {
this.utils.invokeCallback(cb);
return;
}
this.areaService.removePlayer(playerId); // 离开后进行清理
this.areaService.getChannel().pushMessage({
route: 'onUserLeave',
code: this.consts.MESSAGE.RES,
playerId: playerId
});
this.utils.invokeCallback(cb);
};
思考: 这个this.areaService是如何被注册的呢?
多台area场景服务器,不用区分到底在那台服务器就直接删除了吗?
bearcat这个库如何管理数据的?
2)connector服务器
这个已经多次分析过了,因为它监听的是客户端连接,那么自然之道玩家在线离线状态,然后离线时,就通知场景服务器进行处理。