-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPlayerManager.js
94 lines (75 loc) · 2.4 KB
/
PlayerManager.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/**
* Created by Author.
*/
function nop() {
}
var REDIS_KEY_USER_INFO = "fish4user:";//用户信息记录
module.exports = function (rm, _redis) {
redis = _redis;
return new PlayerManager(rm)
};
var redis;
var Player = require("./Player");
var REDIS_KEY_MAIL = "fish4mail:";// mail
//var MAX_PLAYER_COUNT = 2000; //在压力测试前先用2000 暂不设置人数限制
//人数限制由FrontServer进行控制 SceneServer只会将目前状态同步到FrontServer
function PlayerManager(roomManager) {
this.playerList = {};
this.cmdList = {}; //由PlayerManager处理的命令
this.playerCount = 0;//当前玩家数量
this.roomManager = roomManager;
//this.roomManager.setPlayerManager(this);
//============添加 cmd对应的方法
var cmdList = this.cmdList;
cmdList["addPlayer"] = this.addPlayer;
}
PlayerManager.prototype.addPlayer = function (uid, serverId, cb) {
if (!this.playerList[uid]) {
this.playerCount++;
}
if (!this.playerList[uid]) {
this.playerCount++;
}
var self = this;
var p = new Player(uid, serverId, self.roomManager, self.msgManager, self);
self.playerList[uid] = p;
cb(null, p);
};
/**
* 处理本玩家的消息
* @param cmd {String} 消息命令
* @param uid {String} 玩家id
* @param data {Array} 参数数组
* @param cb {Function} 回调函数
* @return {null}
* */
PlayerManager.prototype.processMsg = function (cmd, uid, data, cb) {
if (!data) data = [];
if (this.cmdList[cmd]) {
//var args = Array.apply(null, arguments).slice(1); //arguments 有可能是object
var args = data;
data.unshift(uid);
data.push(cb);
this.cmdList[cmd].apply(this, args);
return null;
}
if (!this.playerList[uid]) {
return cb();// TODO 返回一个本server中没有这个玩家的消息
}
var args = [cmd, data, cb];
this.playerList[uid].processMsg.apply(this.playerList[uid], args);
};
/**
* @return {Number} 返回当前玩家数量
* */
PlayerManager.prototype.getPlayerCount = function () {
return this.playerCount;
};
PlayerManager.prototype.setMsgManager = function (msgManager) {
this.msgManager = msgManager;
};
PlayerManager.prototype.deletePlayer = function (player) {
delete this.playerList[player.uid];
this.playerCount--;
//console.log('=PlayerManager deletePlayer=0000=>',this.playerCount,this.playerList)
};