幼麒棋牌四川麻将的扩展(1)
分布式game_serve的扩展
前几天刚git下了一份代码,研究了下,考虑怎么加一个斗地主。于是修改了下game_server 和hall_server。下面简单的讲一下思路
新的改变
- config里的game_server增加了 GAME_ID。如下 GAME_ID: [“xzdd”, “xlch”],在向大厅注册游戏服务的时候把这个gameserver包涵哪些游戏传过去,这样大厅服在创建房间的时候就可以根据客户端传入的gameid进行查找匹配了。
大厅服里注册游戏服务的时候 保存下gameIds
大厅服中选择游戏服的函数改成根据gameId查询
代码片
.
function chooseServer(gameId) {
var serverinfo = null;
if (gameId == null) {
return null;
}
for (var s in serverMap) {
var info = serverMap[s];
var ar = info.gameIds.filter(function (elem) {
return elem == gameId;
});
if (ar != undefined) {
if (serverinfo == null) {
serverinfo = info;
}
else {
if (serverinfo.load > info.load) {
serverinfo = info;
}
}
}
}
return serverinfo;
}
// 这里可以改进下 游戏分布式考虑 加入gameid
exports.createRoom = function (gameId, account, userId, roomConf, fnCallback) {
var serverinfo = chooseServer(gameId); //加入gameid
if (serverinfo == null) {
fnCallback(101, null);
return;
}
// 大厅服 客户端创建房间的入口 create_private_room 加入gameid
app.get('/create_private_room', function (req, res) {
//验证参数合法性
var data = req.query;
//验证玩家身份
if (!check_account(req, res)) {
return;
}
var account = data.account;
data.account = null;
data.sign = null;
var conf = data.conf;
var gameId = data.gameId;
db.get_user_data(account, function (data) {
if (data == null) {
http.send(res, 1, "system error");
return;
}
var userId = data.userid;
var name = data.name;
//验证玩家状态
db.get_room_id_of_user(userId, function (roomId) {
if (roomId != null) {
http.send(res, -1, "user is playing in room now.");
return;
}
//创建房间
room_service.createRoom(gameId, account, userId, conf, function (err, roomId) {
完毕待续。。。