Files
youlegames/codes/games/server/youle/server_agent/class.agent.js
2026-02-04 23:47:45 +08:00

377 lines
11 KiB
JavaScript

///////////////////////////////////////////////////////////////
/////////////// cls_youle_agent_agent: 运营商 /////////////////
///////////////////////////////////////////////////////////////
var cls_youle_agent_agent = cls_youle_agent_agent || {
//构造函数
new: function(agentid, name, server, tcpport, httpport, freeroom, managecode,initCard,initBean){
var agent = {};
agent.agentid = agentid; //运营商id
agent.agentname = name; //运营商名称
agent.server = server; //运营商服务器地址
agent.tcpport = tcpport; //运营商服务器tcp端口
agent.httpport = httpport; //运营商服务器http端口
agent.freeroom = freeroom; //默认同意解散房间的倒计时,秒
agent.managecode = managecode; //管理码
agent.isclose = 0; //服务器关闭标志 0:已开启 1:已关闭(不能创建房间、不能加入房间)
agent.initCard = initCard;
agent.initBean = initBean;
//游戏列表
agent.games = [];
//玩家列表
agent.players = [];
//短号列表
agent.shortcodes = [];
agent.shortcodes.length = 99999;
//方法
agent.method = {};
//载入游戏(没找到则创建)
agent.method.load_game = function(gameid, gamename, minroomcode, maxroomcode, seatcount, makewar, modename){
return cls_youle_agent_agent.load_game(agent, gameid, gamename, minroomcode, maxroomcode, seatcount, makewar, modename);
};
//查找游戏
agent.method.find_game = function(gameid){
return cls_youle_agent_agent.find_game(agent, gameid);
};
//载入玩家(没找到则创建)
agent.method.load_player = function(playerid, roomcard, bean, openid, unionid, nickname, avatar, sex, playertype, invitecode,sign){
return cls_youle_agent_agent.load_player(agent, playerid, roomcard, bean, openid, unionid, nickname, avatar, sex, playertype, invitecode,sign);
};
//查找玩家
agent.method.find_player = function(playerid){
return cls_youle_agent_agent.find_player(agent, playerid);
};
//清除玩家
agent.method.clear_player = function(playerid){
cls_youle_agent_agent.clear_player(agent, playerid);
};
//机器人昵称、头像
agent.method.get_robotinfo = function(){
cls_youle_agent_agent.get_robotinfo(agent);
};
//机器人昵称、头像
agent.method.getRobotInfo = function(){
cls_youle_agent_agent.getRobotInfo(agent);
};
agent.method.alyVideoConfig = function(videoConfig,count){
return cls_youle_agent_agent.alyVideoConfig(videoConfig,count);
};
//机器人
agent.robot_nicknamelist = [];
agent.robot_avatarlist = [];
agent.method.get_robotinfo();
agent.timer_getrobot = min_ontime(agent.method.get_robotinfo, 8 * 60 * 60 * 1000);
//机器人随机列表
agent.robotArray = new Array(10000);
for(var i=0;i<agent.robotArray.length;i++){
agent.robotArray[i] = i;
}
//机器人昵称列表
agent.robotNicknames=null;
agent.method.getRobotInfo();
return agent;
},
//载入游戏(没找到则创建)
load_game: function(o_agent, gameid, gamename, minroomcode, maxroomcode, seatcount, makewar, modename){
var idx = cls_youle_agent_agent.aryidx_game(gameid);
if (o_agent.games.length <= idx) {
o_agent.games.length = idx + 1;
}
var o_game = o_agent.games[idx];
if (!o_game){
//不存在则创建
o_game = cls_youle_agent_game.new(o_agent, gameid, idx, gamename, minroomcode, maxroomcode, seatcount, makewar, modename);
o_agent.games[idx] = o_game;
} else {
o_game.idx = idx;
o_game.gamename = gamename;
o_game.minroomcode = minroomcode;
o_game.maxroomcode = maxroomcode;
o_game.seatcount = seatcount;
o_game.makewar = makewar;
o_game.modename = modename;
}
return o_game;
},
//查找游戏
find_game: function(o_agent, gameid){
var idx = cls_youle_agent_agent.aryidx_game(gameid);
if (idx == -1){
return null;
}
if (o_agent.games.length <= idx){
return null;
}
if (!o_agent.games[idx]){
return null;
}
if (o_agent.games[idx].gameid != gameid){
return null;
}
return o_agent.games[idx];
},
//计算游戏的数组下标
aryidx_game: function(gameid){
//gameid的5、10、15、20四位组成数组下标
var idx = parseInt(gameid.substr(4, 1)
+ gameid.substr(9, 1)
+ gameid.substr(14, 1)
+ gameid.substr(19, 1));
if (isNaN(idx)){
return -1;
}
return idx;
},
//载入玩家(没找到则创建)
load_player: function(o_agent, playerid, roomcard, bean, openid, unionid, nickname, avatar, sex, playertype, invitecode,sign){
var idx = cls_youle_agent_agent.aryidx_player(playerid);
if (o_agent.players.length <= idx) {
o_agent.players.length = idx + 1;
}
var o_player = o_agent.players[idx];
if (!o_player) {
//不存在则创建
o_player = cls_youle_agent_player.new(o_agent, playerid, roomcard, bean, openid, unionid, nickname, avatar, sex, playertype, invitecode);
o_agent.players[idx] = o_player;
} else {
//更新玩家信息
o_player.roomcard = roomcard;
o_player.bean = bean;
o_player.openid = openid;
o_player.unionid = unionid;
o_player.nickname = nickname;
o_player.avatar = avatar;
o_player.sex = sex;
o_player.playertype = playertype;
o_player.invitecode = invitecode;
}
return o_player;
},
//查找玩家
find_player: function(o_agent, playerid){
var idx = cls_youle_agent_agent.aryidx_player(playerid);
if (idx == -1){
return null;
}
if (o_agent.players.length <= idx){
return null;
}
if (!o_agent.players[idx]){
return null;
}
if (o_agent.players[idx].playerid != playerid){
return null;
}
return o_agent.players[idx];
},
//清除玩家
clear_player: function(o_agent, playerid){
var idx = cls_youle_agent_agent.aryidx_player(playerid);
if (idx == -1){
return;
}
if (o_agent.players.length <= idx){
return;
}
if (!o_agent.players[idx]){
return;
}
if (o_agent.players[idx].playerid != playerid){
return;
}
o_agent.players[idx] = null;
},
//计算玩家的数组下标
aryidx_player: function(playerid){
var idx = parseInt(playerid) - 100001;
if (isNaN(idx)){
return -1;
}
return idx;
},
//机器人昵称、头像
get_robotinfo: function(o_agent){
var db_callback_robot_nickname = function(dbdata){
o_agent.robot_nicknamelist = [];
for (var i = 0; i < dbdata.length; i++) {
o_agent.robot_nicknamelist.push(dbdata[i].play_nickname);
}
}
var sql1 = "select v1.play_nickname from player as v1 " +
"inner join (select floor(min(idx) + (rand() * (max(idx) - min(idx)))) as idx from player) as v2 " +
"where v1.idx >= v2.idx " +
"and play_agentid <> ? " +
"and trim(play_nickname) <> '' " +
"and (not play_nickname like '%测试%') " +
"and (not play_nickname like '%游客%') " +
"order by v1.idx limit 2000;";
if (o_agent.agentid == "i33v0llvp0euhd1n9qo1fM2RV8vtog4y"){
youle_room.mysql.execsql("opensql", sql1, [" "], db_callback_robot_nickname);
} else {
youle_room.mysql.execsql("opensql", sql1, [o_agent.agentid], db_callback_robot_nickname);
}
var db_callback_robot_avatar = function(dbdata){
o_agent.robot_avatarlist = [];
for (var i = 0; i < dbdata.length; i++) {
o_agent.robot_avatarlist.push(dbdata[i].play_avatar);
}
}
var sql2 = "select v1.play_avatar from player as v1 " +
"inner join (select floor(min(idx) + (rand() * (max(idx) - min(idx)))) as idx from player) as v2 " +
"where v1.idx >= v2.idx " +
"and play_agentid <> ? " +
"and trim(play_nickname) <> '' " +
"and (not play_nickname like '%测试%') " +
"and (not play_nickname like '%游客%') " +
"and play_avatar <> '' " +
"and play_avatar <> '/0' " +
"order by v1.idx limit 2000;";
if (o_agent.agentid == "i33v0llvp0euhd1n9qo1fM2RV8vtog4y"){
youle_room.mysql.execsql("opensql", sql2, [" "], db_callback_robot_avatar);
} else {
youle_room.mysql.execsql("opensql", sql2, [o_agent.agentid], db_callback_robot_avatar);
}
},
//获取机器人信息
getRobotInfo:function(o_agent){
var cfg = {};
cfg.url = "http://projectimage.tscce.cn/avatar/nikcname.txt" + "?" + min_timestamp();
cfg.type = "POST";
cfg.data = "";
cfg.success = function(str){
if (str){
try{
var data = JSON.parse(str);
console.log("获取机器人昵称列表成功!!");
o_agent.robotNicknames = data.data;
}
catch(e){
}
}
};
cfg.error = function(str){
console.log("获取机器人昵称列表失败!!");
};
min_http(cfg);
},
//解析视频房配置
alyVideoConfig:function(videoConfig,count){
if(videoConfig){
if(videoConfig.type == 1){
switch(videoConfig.profitMode){
case 1://固定
return [1,Number(videoConfig.profit)];
break;
case 2://比例
break;
}
}else if(videoConfig.type == 2){
switch(videoConfig.profitMode){
case 1://固定
return [2,Number(videoConfig.profit)];
break;
case 2://比例
break;
}
}
}
return[0,0];
}
}
///////////////////////////////////////////////////////////////
/////////// cls_youle_agent_agentlist: 运营商列表 //////////
///////////////////////////////////////////////////////////////
var cls_youle_agent_agentlist = cls_youle_agent_agentlist || {
//构造函数
new: function() {
var agentlist = {};
//代理商列表
agentlist.list = [];
//方法
agentlist.method = {};
//载入代理商(没找到则创建)
agentlist.method.load_agent = function(agentid, name, server, tcpport, httpport, freeroom, managecode,initCard,initBean){
var idx = agentlist.method.aryidx_agent(agentid);
if (idx == -1){
return null;
}
if (agentlist.list.length <= idx) {
agentlist.list.length = idx + 1;
}
var o_agent = agentlist.list[idx];
if (!o_agent) {
//不存在则创建
o_agent = cls_youle_agent_agent.new(agentid, name, server, tcpport, httpport, freeroom, managecode,initCard,initBean);
agentlist.list[idx] = o_agent;
} else {
o_agent.agentname = name;
o_agent.server = server;
o_agent.tcpport = tcpport;
o_agent.httpport = httpport;
o_agent.freeroom = freeroom;
o_agent.managecode = managecode;
o_agent.initCard = initCard;
o_agent.initBean = initBean;
}
return o_agent;
};
//查找运营商
agentlist.method.find_agent = function(agentid){
var idx = agentlist.method.aryidx_agent(agentid);
if (idx == -1){
return null;
}
if (agentlist.list.length <= idx){
return null;
}
if (!agentlist.list[idx]){
return null;
}
if (agentlist.list[idx].agentid != agentid){
return null;
}
return agentlist.list[idx];
};
//计算运营商的数组下标
agentlist.method.aryidx_agent = function(agentid) {
//agentid的5、10、15、20四位组成数组下标
var idx = parseInt(agentid.substr(4, 1)
+ agentid.substr(9, 1)
+ agentid.substr(14, 1)
+ agentid.substr(19, 1));
if (isNaN(idx)){
return -1;
}
return idx;
};
return agentlist;
}
}
//运营商列表
youle_agent.agents = cls_youle_agent_agentlist.new();