目录结构调整
This commit is contained in:
270
codes/games/sales_service/youle/server_agent/class.game.js
Normal file
270
codes/games/sales_service/youle/server_agent/class.game.js
Normal file
@@ -0,0 +1,270 @@
|
||||
///////////////////////////////////////////////////
|
||||
////////// cls_youle_agent_game: 游戏 //////////
|
||||
///////////////////////////////////////////////////
|
||||
var cls_youle_agent_game = cls_youle_agent_game || {
|
||||
//构造函数
|
||||
new: function(o_agent, gameid, gameidx, gamename, minroomcode, maxroomcode, seatcount, makewar, modename){
|
||||
var game = {};
|
||||
//基本信息
|
||||
game.o_agent = o_agent; //代理商
|
||||
game.gameid = gameid; //游戏id
|
||||
game.idx = gameidx; //游戏的数组下标
|
||||
game.gamename = gamename; //游戏名称
|
||||
game.minroomcode = minroomcode; //最小房号
|
||||
game.maxroomcode = maxroomcode; //最大房号
|
||||
game.seatcount = seatcount; //房间内的座位数量
|
||||
game.makewar = makewar; //达成开战条件的人数
|
||||
game.modename = modename; //服务器模块名称
|
||||
|
||||
game.online_p = 0; //在线玩家数
|
||||
game.online_timer = null; //统计在线人数的定时器
|
||||
game.online_day = null; //当前日期
|
||||
game.online_max = null; //当天最大在线人数
|
||||
game.online_maxtime = null; //当天最大在线人数出现的时间
|
||||
game.room_day = null; //当前日期
|
||||
game.room_max = null; //当天最大房间数
|
||||
game.room_maxtime = null; //当天最大房间数出现的时间
|
||||
//房号列表
|
||||
game.roomcodes = [];
|
||||
game.roomcodes.length = maxroomcode - minroomcode + 1;
|
||||
//房号在数组中的位置
|
||||
game.roomaryid = [];
|
||||
game.roomaryid.length = maxroomcode - minroomcode + 1;
|
||||
for (var i = 0; i < game.roomcodes.length; i++) {
|
||||
game.roomcodes[i] = game.minroomcode + i;
|
||||
game.roomaryid[i] = i;
|
||||
};
|
||||
//房号列表的有效长度
|
||||
game.roomcodesvalidlen = maxroomcode - minroomcode + 1;
|
||||
//房间服务器列表
|
||||
game.servers = [];
|
||||
cls_youle_agent_game.get_roomserverlist(game);
|
||||
//比赛列表
|
||||
game.matchlist = cls_youle_agent_matchlist.new(game);
|
||||
|
||||
//统计在线人数的定时器
|
||||
game.online_timer = setInterval(
|
||||
function(){
|
||||
var sql = "insert into agent_game_online(aggo_agentid, aggo_gameid, aggo_datetime, aggo_onlineplayer, aggo_onlineroom) values(?,?,?,?,?);";
|
||||
youle_agent.mysql.execsql("execsql", sql, [game.o_agent.agentid, game.gameid, min_now(), game.online_p, game.maxroomcode - game.minroomcode + 1 - game.roomcodesvalidlen]);
|
||||
}, 1000 * 60 * 10);
|
||||
|
||||
//方法
|
||||
game.method = {};
|
||||
|
||||
//获取房号对应的房间服务器地址和端口号
|
||||
game.method.get_roomserver = function(roomcode){
|
||||
return cls_youle_agent_game.get_roomserver(game, roomcode);
|
||||
}
|
||||
|
||||
//随机获取新的房间号
|
||||
game.method.new_roomcode = function(shortcode){
|
||||
return cls_youle_agent_game.new_roomcode(game, shortcode);
|
||||
}
|
||||
|
||||
//释放房号
|
||||
game.method.free_roomcode = function(roomcode){
|
||||
cls_youle_agent_game.free_roomcode(game, roomcode);
|
||||
}
|
||||
|
||||
//在线人数变动
|
||||
game.method.online_p_chang = function(change){
|
||||
cls_youle_agent_game.online_p_chang(game, change);
|
||||
}
|
||||
|
||||
//房间数量变动
|
||||
game.method.roomcodesvalidlen_chang = function(change){
|
||||
cls_youle_agent_game.roomcodesvalidlen_chang(game, change);
|
||||
}
|
||||
|
||||
return game;
|
||||
},
|
||||
|
||||
//获取房间服务器列表
|
||||
get_roomserverlist: function(o_game){
|
||||
var db_callback = function(dbdata){
|
||||
for (var i = 0; i < dbdata.length; i++) {
|
||||
var _roomserver = {};
|
||||
_roomserver.minroomcode = parseInt(dbdata[i].minroomcode);
|
||||
_roomserver.maxroomcode = parseInt(dbdata[i].maxroomcode);
|
||||
_roomserver.server = dbdata[i].server;
|
||||
_roomserver.tcpport = parseInt(dbdata[i].tcpport);
|
||||
_roomserver.httpport = parseInt(dbdata[i].httpport);
|
||||
o_game.servers.push(_roomserver);
|
||||
}
|
||||
};
|
||||
var sql = " select aggr_minroomcode as minroomcode, "
|
||||
+ " aggr_maxroomcode as maxroomcode, "
|
||||
+ " aggr_server as server, "
|
||||
+ " aggr_port_tcp as tcpport, "
|
||||
+ " aggr_port_http as httpport "
|
||||
+ " from agent_game_room "
|
||||
+ " where aggr_agentid = ? and aggr_gameid = ?;";
|
||||
youle_agent.mysql.execsql("opensql", sql, [o_game.o_agent.agentid, o_game.gameid], db_callback);
|
||||
},
|
||||
|
||||
//获取房号对应的房间服务器地址和端口号
|
||||
get_roomserver: function(o_game, roomcode){
|
||||
var re = {};
|
||||
for (var i = 0; i < o_game.servers.length; i++) {
|
||||
if (roomcode >= o_game.servers[i].minroomcode && roomcode <= o_game.servers[i].maxroomcode){
|
||||
re.server = o_game.servers[i].server;
|
||||
re.tcpport = o_game.servers[i].tcpport;
|
||||
re.httpport = o_game.servers[i].httpport;
|
||||
re.minroomcode = o_game.servers[i].minroomcode;
|
||||
re.maxroomcode = o_game.servers[i].maxroomcode;
|
||||
return re;
|
||||
}
|
||||
}
|
||||
re.server = o_game.o_agent.server;
|
||||
re.tcpport = o_game.o_agent.tcpport;
|
||||
re.httpport = o_game.o_agent.httpport;
|
||||
re.minroomcode = o_game.minroomcode;
|
||||
re.maxroomcode = o_game.maxroomcode;
|
||||
return re;
|
||||
},
|
||||
|
||||
//随机获取新的房号
|
||||
new_roomcode: function(o_game, shortcode){
|
||||
if (o_game.roomcodesvalidlen == 0){
|
||||
return null;
|
||||
}
|
||||
//确定房号
|
||||
var roomcode;
|
||||
var idx;
|
||||
if (shortcode){
|
||||
if (shortcode < 100000){
|
||||
//短号,优先分配短号相关的房间号
|
||||
while (shortcode < 100000){
|
||||
shortcode = shortcode * 10;
|
||||
}
|
||||
for (var i=1; i<9; i++){
|
||||
roomcode = shortcode + i;
|
||||
idx = o_game.roomaryid[roomcode - o_game.minroomcode];
|
||||
if (idx < o_game.roomcodesvalidlen){
|
||||
break;
|
||||
} else {
|
||||
roomcode = null;
|
||||
idx = null;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//长号,取制定房号
|
||||
roomcode = shortcode;
|
||||
idx = o_game.roomaryid[roomcode - o_game.minroomcode];
|
||||
}
|
||||
}
|
||||
//分配随机房间号
|
||||
if (!roomcode){
|
||||
for (var i=1; i<9; i++){
|
||||
//在有效房号数组中随机数组下标
|
||||
idx = min_random(0, o_game.roomcodesvalidlen - 1);
|
||||
roomcode = o_game.roomcodes[idx];
|
||||
//如果是1,2,3这样的房号则重新取房号,1、2、3这样房号预留给短号
|
||||
if (roomcode % 10 > 3 || roomcode % 10 < 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//将有效数组的最后一个房号与该房号互换位置
|
||||
if (idx < o_game.roomcodesvalidlen - 1) {
|
||||
var lastroomcode = o_game.roomcodes[o_game.roomcodesvalidlen - 1];
|
||||
|
||||
o_game.roomcodes[idx] = lastroomcode;
|
||||
o_game.roomaryid[lastroomcode - o_game.minroomcode] = idx;
|
||||
|
||||
o_game.roomcodes[o_game.roomcodesvalidlen - 1] = roomcode;
|
||||
o_game.roomaryid[roomcode - o_game.minroomcode] = o_game.roomcodesvalidlen - 1;
|
||||
|
||||
};
|
||||
//有效数组长度减1
|
||||
o_game.method.roomcodesvalidlen_chang(-1);
|
||||
|
||||
return roomcode;
|
||||
},
|
||||
|
||||
//释放房号
|
||||
free_roomcode: function(o_game, roomcode){
|
||||
var idx = o_game.roomaryid[roomcode - o_game.minroomcode];
|
||||
if (idx > o_game.roomcodesvalidlen){
|
||||
var lastroomcode = o_game.roomcodes[o_game.roomcodesvalidlen];
|
||||
|
||||
o_game.roomcodes[idx] = lastroomcode;
|
||||
o_game.roomaryid[lastroomcode - o_game.minroomcode] = idx;
|
||||
|
||||
o_game.roomcodes[o_game.roomcodesvalidlen] = roomcode;
|
||||
o_game.roomaryid[roomcode - o_game.minroomcode] = o_game.roomcodesvalidlen;
|
||||
|
||||
o_game.method.roomcodesvalidlen_chang(1);
|
||||
} else if (idx == o_game.roomcodesvalidlen){
|
||||
o_game.method.roomcodesvalidlen_chang(1);
|
||||
}
|
||||
|
||||
//如果是星星争霸场的房间则在星星争霸场中删除该房间
|
||||
if (o_game.sharerooms_player){
|
||||
min_ary_delval(o_game.sharerooms_player, roomcode, "roomcode");
|
||||
}
|
||||
if (o_game.sharerooms_system == roomcode){
|
||||
min_ary_delval(o_game.sharerooms_system, roomcode, "roomcode");
|
||||
}
|
||||
},
|
||||
|
||||
//在线人数变动
|
||||
online_p_chang: function(o_game, change){
|
||||
o_game.online_p = o_game.online_p + change;
|
||||
|
||||
if (!o_game.online_max){
|
||||
o_game.online_max = o_game.online_p;
|
||||
o_game.online_day = min_day();
|
||||
o_game.online_maxtime = min_now();
|
||||
} else {
|
||||
if (min_day() == o_game.online_day){ //同一天
|
||||
if (o_game.online_p > o_game.online_max){
|
||||
o_game.online_max = o_game.online_p;
|
||||
o_game.online_maxtime = min_now();
|
||||
}
|
||||
} else { //不是同一天
|
||||
//保存上一天的最大在线人数
|
||||
var sql = "call cp_report_game_day(?,?,?,?,?,?);";
|
||||
youle_agent.mysql.execsql("execsql", sql, [o_game.o_agent.agentid, o_game.gameid, o_game.online_day, 3, o_game.online_max, o_game.online_maxtime]);
|
||||
|
||||
o_game.online_max = o_game.online_p;
|
||||
o_game.online_day = min_day();
|
||||
o_game.online_maxtime = min_now();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
//房间数量变动
|
||||
roomcodesvalidlen_chang: function(o_game, change){
|
||||
o_game.roomcodesvalidlen = o_game.roomcodesvalidlen + change;
|
||||
//当前的房间数量
|
||||
var roomcount = o_game.maxroomcode - o_game.minroomcode + 1 - o_game.roomcodesvalidlen;
|
||||
|
||||
//测试用
|
||||
if (roomcount < 0){
|
||||
console.log(min_now() + "房号管理错误|||||||||||||||||||||||| agentid:" + o_game.o_agent.agentid + ",gameid:" + o_game.gameid);
|
||||
}
|
||||
|
||||
if (!o_game.room_max){
|
||||
o_game.room_max = roomcount;
|
||||
o_game.room_day = min_day();
|
||||
o_game.room_maxtime = min_now();
|
||||
} else {
|
||||
if (min_day() == o_game.room_day){ //同一天
|
||||
if (roomcount > o_game.room_max){
|
||||
o_game.room_max = roomcount;
|
||||
o_game.room_maxtime = min_now();
|
||||
}
|
||||
} else { //不是同一天
|
||||
//保存上一天的最大房间数
|
||||
var sql = "call cp_report_game_day(?,?,?,?,?,?);";
|
||||
youle_agent.mysql.execsql("execsql", sql, [o_game.o_agent.agentid, o_game.gameid, o_game.room_day, 4, o_game.room_max, o_game.room_maxtime]);
|
||||
|
||||
o_game.room_max = roomcount;
|
||||
o_game.room_day = min_day();
|
||||
o_game.room_maxtime = min_now();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user