目录结构调整
This commit is contained in:
287
codes/games/client/Projects/zpy/js/class/class.desk2.js
Normal file
287
codes/games/client/Projects/zpy/js/class/class.desk2.js
Normal file
@@ -0,0 +1,287 @@
|
||||
/*================= cls_desk2: 牌桌基础类 =================
|
||||
说明:
|
||||
1,房间对象由框架负责创建和释放。
|
||||
2,房间对象管理的是人,解决诸如谁在房间里,谁在哪个位置上,谁进了房间,谁离开了房间等问题。
|
||||
3,牌桌对象由游戏负责创建,牌桌对象会随着房间的释放而释放,子游戏不用管牌桌的释放。
|
||||
4,牌桌对象管理的是牌,解决诸如哪个位置上发了什么牌,出了什么牌等问题。
|
||||
|
||||
注意:
|
||||
1,此牌桌类是基础类;各子游戏需要在继承此基础类的情况下编写自己的牌桌类。
|
||||
2,子游戏开发人员不能修改该文件。
|
||||
3,子游戏只能调用实例方法,不能直接调用类方法。
|
||||
=========================================================*/
|
||||
var cls_desk2 = {
|
||||
|
||||
//debug服务器地址
|
||||
// debugserver: "120.26.52.206:8080", //外网地址,开发人员本地调试时使用该地址
|
||||
debugserver: "10.117.216.66:8080", //内网地址,正式服务器上使用该地址
|
||||
|
||||
//创建实例
|
||||
new: function(object_room){//参数说明:object_room 牌桌对应的房间对象
|
||||
var object = {};
|
||||
|
||||
//牌桌与房间互挂
|
||||
object_room.o_desk = object; //可通过房间对象的o_desk属性访问牌桌对象
|
||||
object.o_room = object_room; //可通过牌桌对象的o_desk属性访问房间对象
|
||||
|
||||
//=============== 在下面定义实例的属性 ===============
|
||||
//数据
|
||||
object.data = {}; //要求data必须是纯数据,不能在data下面写方法、函数、定时器
|
||||
//定时器
|
||||
object.timer = {}; //可根据实际需要在desk.timer下定义多个定时器
|
||||
//收发包
|
||||
object.pack = []; //调试状态下记录牌桌的收包发包情况
|
||||
//bug调试方法
|
||||
object.debug = {};
|
||||
//游戏内容方法
|
||||
object.method = {};
|
||||
|
||||
//小局列表。每开一小局则往该数组中添加一个aset小局对象,格式如[aset, aset, aset, ...],数组长度即可表示当前是第几小局,数组最后一个小局对象即是当前小局
|
||||
object.data.asetlist = [];
|
||||
|
||||
|
||||
//=============== 在下面定义实例的方法 ===============
|
||||
/*1,要求实例的方法必须调用类的方法,以节省内存资源。
|
||||
2,要求实例的方法必须只用一句代码调用类的方法,并将实例对象作为第一个参数传给类方法。
|
||||
3,要求实例的方法名要与类的方法名保持一致。*/
|
||||
|
||||
//====================== bug调试 =====================
|
||||
//记录游戏的收包情况(不包括框架的收包),要求前端向服务器发包时根据isdebugger参数的配置情况将前端的内存数据一起发上来,数据放在pack.data.d里面,服务器收到前端发来的包后必须调用该方法
|
||||
//参数说明:pack前端发来的包,seat哪个位置发来的包,哪个玩家发来的包
|
||||
object.debug.save_receivepack = function(pack, seat, playerid){
|
||||
return cls_desk2.save_receivepack(object, pack, seat, playerid);
|
||||
}
|
||||
//记录游戏的发包情况(不包括框架的发包),要求服务器向前端发包后一定要调用该方法
|
||||
/*参数说明:pack向前端发的包,seat给哪个位置发包,给哪个玩家发包。
|
||||
如果是向所有玩家发包则seat传-1,playerid传null,
|
||||
如果是向多个玩家发包则seat传位置数组,playerid传玩家id数组*/
|
||||
object.debug.save_sendpack = function(pack, seat, playerid){
|
||||
return cls_desk2.save_sendpack(object, pack, seat, playerid);
|
||||
}
|
||||
//将当前小局的收发包情况保存到debug服务器上,要求小局结算后,下一个小局新建前调用此方法
|
||||
//参数说明:callback_succ保存成功的回调函数,callback_fail保存失败的回调函数
|
||||
object.debug.save_pack_curraset = function(callback_succ, callback_fail){
|
||||
return cls_desk2.save_pack_curraset(object, callback_succ, callback_fail);
|
||||
}
|
||||
//输出调试日志到debug服务器上,输入后可在debug服务器上或浏览器中查看日志内容
|
||||
//参数说明:dir日志目录名,file日志文件名,log要输出的日志内容
|
||||
object.debug.save_log = function(dir, file, log){
|
||||
return cls_desk2.save_log(object, dir, file, log);
|
||||
}
|
||||
//清空debug服务器上的调试日志
|
||||
//参数说明:dir日志目录名,file日志文件名
|
||||
object.debug.clear_log = function(dir, file){
|
||||
return cls_desk2.clear_log(object, dir, file);
|
||||
}
|
||||
|
||||
|
||||
//====================== 游戏内容 =====================
|
||||
//对应的小局类
|
||||
object.method.AsetClass = function(){
|
||||
return cls_aset2;
|
||||
}
|
||||
//新建一小局
|
||||
object.method.NewAset = function(){
|
||||
return cls_desk2.NewAset(object);
|
||||
}
|
||||
//大局结算
|
||||
object.method.CloseAccount = function(){
|
||||
return cls_desk2.CloseAccount(object);
|
||||
}
|
||||
|
||||
//获取当前小局对象
|
||||
object.method.CurrAset = function(){
|
||||
return cls_desk2.CurrAset(object);
|
||||
}
|
||||
//获取当前小局是第几小局
|
||||
object.method.CurrAsetNum = function(){
|
||||
return cls_desk2.CurrAsetNum(object);
|
||||
}
|
||||
//获取下一个有人的位置
|
||||
object.method.GetNextSeat = function(seat){
|
||||
return cls_desk2.GetNextSeat(object, seat);
|
||||
}
|
||||
|
||||
return object;
|
||||
},
|
||||
|
||||
//================ 在下面定义类的方法 ================
|
||||
//===================== bug调试 ======================
|
||||
//记录服务器收包情况
|
||||
save_receivepack: function(o_desk, pack, seat, playerid){
|
||||
try{
|
||||
if (o_desk.o_room.o_game.method.isdebugger()){ //如果是调试状态下,则记录收包情况
|
||||
var o_save = {};
|
||||
o_save.time = min_now(); //记录的时间
|
||||
o_save.type = 0; //服务器收到前端的发包
|
||||
o_save.seat = seat; //哪个位置发来的包
|
||||
o_save.playerid = playerid; //哪个玩家发来的包
|
||||
o_save.data = {};
|
||||
//前端内存数据
|
||||
o_save.data.client = pack.data.d;
|
||||
//服务器房间内存数据
|
||||
o_save.data.room = o_desk.o_room.method.get_roominfo();
|
||||
//服务器牌桌内存数据
|
||||
o_save.data.desk = min_copyjson(o_desk.data);
|
||||
for (var i = 0; i < o_save.data.desk.asetlist.length; i++) {
|
||||
if (i < o_save.data.desk.asetlist.length - 1){
|
||||
o_save.data.desk.asetlist[i] = null;
|
||||
};
|
||||
};
|
||||
delete pack.data.d;
|
||||
//接收到的数据包
|
||||
o_save.pack = pack;
|
||||
o_desk.pack.push(o_save);
|
||||
}
|
||||
}catch(e){};
|
||||
},
|
||||
//记录服务器发包情况
|
||||
save_sendpack: function(o_desk, pack, seat, playerid){
|
||||
try{
|
||||
if (o_desk.o_room.o_game.method.isdebugger()){ //如果是调试状态下,则记录发包情况
|
||||
var o_save = {};
|
||||
o_save.time = min_now(); //记录的时间
|
||||
o_save.type = 1; //服务器向前端发包
|
||||
o_save.seat = seat; //服务器向哪个位置发包
|
||||
o_save.playerid = playerid; //服务器向哪个玩家发包
|
||||
o_save.data = {};
|
||||
//服务器房间内存数据
|
||||
o_save.data.room = o_desk.o_room.method.get_roominfo();
|
||||
//服务器牌桌内存数据
|
||||
o_save.data.desk = min_copyjson(o_desk.data);
|
||||
for (var i = 0; i < o_save.data.desk.asetlist.length; i++) {
|
||||
if (i < o_save.data.desk.asetlist.length - 1){
|
||||
o_save.data.desk.asetlist[i] = null;
|
||||
};
|
||||
};
|
||||
//发送的数据包
|
||||
o_save.pack = pack;
|
||||
o_desk.pack.push(o_save);
|
||||
}
|
||||
}catch(e){};
|
||||
},
|
||||
//将当前小局的收发包情况保存到debug服务器上
|
||||
save_pack_curraset: function(o_desk, callback_succ, callback_fail){
|
||||
try{
|
||||
if (o_desk.o_room.o_game.method.isdebugger()){
|
||||
for (var i = 0; i < o_desk.pack.length; i++) {
|
||||
o_desk.pack[i].saveflag = 1;
|
||||
};
|
||||
|
||||
var o_makewartime = new Date(o_desk.o_room.makewartime);
|
||||
var yyyy = o_makewartime.getFullYear();
|
||||
var mm = o_makewartime.getMonth() + 1;
|
||||
var dd = o_makewartime.getDate();
|
||||
var dir = yyyy + "-" + mm + "-" + dd;
|
||||
var file = o_desk.o_room.o_game.o_agent.agentid + "-" + o_desk.o_room.o_game.gameid + "-" + o_desk.o_room.roomcode + "-" + o_desk.method.CurrAsetNum() + ".txt";
|
||||
var data = JSON.stringify(o_desk.pack);
|
||||
|
||||
var cfg = {};
|
||||
cfg.url = "http://" + cls_desk2.debugserver + "/debug.php";
|
||||
cfg.data = "dir=" + dir + "&file=" + file + "&data=" + data;
|
||||
cfg.type = "POST";
|
||||
cfg.success = function(str){
|
||||
for (var i = 0; i < o_desk.pack.length; i++) {
|
||||
if (o_desk.pack[i].saveflag){
|
||||
o_desk.pack.splice(i, 1);
|
||||
i--;
|
||||
};
|
||||
};
|
||||
if(callback_succ){
|
||||
callback_succ();
|
||||
};
|
||||
};
|
||||
cfg.error = function(str){
|
||||
for (var i = 0; i < o_desk.pack.length; i++) {
|
||||
if (o_desk.pack[i].saveflag){
|
||||
delete o_desk.pack[i].saveflag;
|
||||
};
|
||||
};
|
||||
console.log(min_now() + " 保存牌局调试数据失败1");
|
||||
console.log("dir=" + dir);
|
||||
console.log("file=" + file);
|
||||
console.log(str);
|
||||
if(callback_fail){
|
||||
callback_fail();
|
||||
};
|
||||
};
|
||||
min_http(cfg);
|
||||
}
|
||||
}catch(e){
|
||||
console.log(min_now() + " 保存牌局调试数据失败2");
|
||||
console.log("dir=" + dir);
|
||||
console.log("file=" + file);
|
||||
console.log(e);
|
||||
};
|
||||
},
|
||||
//输出调试日志到debug服务器上
|
||||
save_log: function(o_desk, dir, file, log){
|
||||
try{
|
||||
if (typeof(log) == "object"){
|
||||
log = JSON.stringify(log);
|
||||
}
|
||||
var cfg = {};
|
||||
cfg.url = "http://" + cls_desk2.debugserver + "/savelog.php";
|
||||
cfg.data = "dir=" + dir + "&file=" + file + "&data=" + log;
|
||||
cfg.type = "POST";
|
||||
cfg.success = function(str){};
|
||||
cfg.error = function(str){
|
||||
console.log(min_now() + " 输出调试日志失败");
|
||||
console.log(str);
|
||||
};
|
||||
min_http(cfg);
|
||||
}catch(e){}
|
||||
},
|
||||
//清空debug服务器上的调试日志
|
||||
clear_log: function(o_desk, dir, file){
|
||||
try{
|
||||
var cfg = {};
|
||||
cfg.url = "http://" + cls_desk2.debugserver + "/clearlog.php";
|
||||
cfg.data = "dir=" + dir + "&file=" + file;
|
||||
cfg.type = "POST";
|
||||
cfg.success = function(str){};
|
||||
cfg.error = function(str){
|
||||
console.log(min_now() + " 清空调试日志失败");
|
||||
console.log(str);
|
||||
};
|
||||
min_http(cfg);
|
||||
}catch(e){}
|
||||
},
|
||||
|
||||
//===================== 游戏内容 ======================
|
||||
//新建一小局
|
||||
NewAset: function(o_desk){
|
||||
var o_aset = o_desk.method.AsetClass().New();
|
||||
o_desk.data.asetlist.push(o_aset);
|
||||
return o_aset;
|
||||
},
|
||||
//获取当前小局对象
|
||||
CurrAset: function(o_desk){
|
||||
return o_desk.data.asetlist[o_desk.data.asetlist.length - 1];
|
||||
},
|
||||
//获取当前小局局数
|
||||
CurrAsetNum: function(o_desk){
|
||||
return o_desk.data.asetlist.length;
|
||||
},
|
||||
//获取下一个有人的位置
|
||||
GetNextSeat: function(o_desk, seat){
|
||||
if (seat < 0){
|
||||
return -1;
|
||||
}
|
||||
var seatcount = o_desk.o_room.o_game.seatcount;
|
||||
if (seat >= seatcount){
|
||||
return -1;
|
||||
}
|
||||
var i = seat;
|
||||
var o_nextplayer = null;
|
||||
while (!o_nextplayer){
|
||||
i = (i + 1) % seatcount;
|
||||
o_nextplayer = o_desk.o_room.seatlist[i];
|
||||
}
|
||||
return i;
|
||||
},
|
||||
//大局结算
|
||||
CloseAccount: function(o_desk){
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user