目录结构调整

This commit is contained in:
2026-02-04 23:47:45 +08:00
parent 6938c911c3
commit 6b22238c6e
8780 changed files with 15333 additions and 574 deletions

View 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];
//如果是123这样的房号则重新取房号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();
}
}
}
}