xy-server/game/network/http/HttpGame.ts

818 lines
26 KiB
TypeScript
Raw Normal View History

2025-04-23 09:34:08 +08:00
import Signal from "../../core/Signal";
import Http from "../../utils/Http";
import PlayerMgr from "../../object/PlayerMgr";
import GMMgr from "../../core/GMMgr";
import NoticeMgr from "../../core/NoticeMgr";
import ChargeSum from "../../core/ChargeSum";
import DB from "../../utils/DB";
import Player from "../../object/Player";
// 网络请求
import bodyParser from "body-parser";
import express from "express";
import {Request, Response } from "express";
import Launch from "../../core/Launch";
import GameUtil from "../../core/GameUtil";
import SKDataUtil from "../../gear/SKDataUtil";
import SKLogger from "../../gear/SKLogger";
import DugMgr from "../../role/DugMgr";
import { MsgCode } from "../../role/EEnum";
import GameConf from "../../../conf/GameConf";
import MailData from "../../mail/MailData";
import MailMgr from "../../mail/MailMgr";
import JingJiChang from "../../activity/JingJiChang";
import LotteryMgr from "../../core/LotteryMgr";
import SignInMgr from "../../core/SignInMgr";
import MallMgr from "../../core/MallMgr";
import ZhenbukuiMgr from "../../activity/ZhenbukuiMgr";
import RobotMgr from "../../core/RobotMgr";
import SKRedisUtil from "../../gear/SKRedisUtil";
import DialMgr from "../../core/DialMgr";
import DebrisMall from "../../core/DebrisMall";
import OnlineRewards from "../../activity/OnlineRewards";
import Currency from "../../activity/Currency";
import Ofuda from "../../object/Ofuda";
import { nextTick } from "process";
export default class HttpGame {
static shared = new HttpGame();
app: any;
constructor() {
this.app = express();
this.app.use(function (req: Request, res: Response, next: any) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Expose-Headers", "'Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1');
res.header("Content-Type", "application/json;charset=utf-8");
next();
});
this.app.use(bodyParser.json({ limit: "1mb" }));
this.app.use(bodyParser.urlencoded({ limit: "1mb", extended: true }));
}
loginToken(req: any, res: any) {
SKLogger.info("login token")
let accountid = req.query.accountid;
let roleid = req.query.roleid;
let login_token = req.query.token;
Signal.shared.addLoginToken(accountid, login_token);
Http.reply(res, {
result: MsgCode.SUCCESS,
});
}
getClientIP(req: any, res: any): string {
var ip = req.headers['x-forwarded-for'] ||
req.ip ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress || '';
if (ip.split(',').length > 0) {
ip = ip.split(',')[0];
}
return ip;
}
// 充值回调
chargeCallback(req: any, res: any) {
let roleid = req.query.roleid;
let jade = SKDataUtil.numberBy(req.query.jade);
let sdorderno = req.query.sdorderno;
let sdpayno = req.query.sdpayno;
let sd_money: number = SKDataUtil.numberBy(req.query.sd_money);
let total_fee: number = SKDataUtil.numberBy(req.query.total_fee);
let msg: string = "";
if (sd_money != total_fee) {
// 支付调试模式下不验证金额是否匹配
if (GameConf.debugPay.length < 0) {
msg = `支付:在线玩家[${roleid}]订单金额${sd_money}元与实充金额${total_fee}元不匹配,游戏订单${sdorderno},支付订单${sdpayno}无效!`
SKLogger.warn(msg);
}
}
let player = PlayerMgr.shared.getPlayerByRoleId(roleid);
if (player) {
let msg = `支付:在线玩家[${player.roleid}:${player.name}]充值${jade}仙玉成功,游戏订单${sdorderno},支付订单${sdpayno}`
SKLogger.info(msg);
player.send('s2c_notice', {
strRichText: `您充值${total_fee}元成功!`,
});
// 充值奖励凤羽道具
this.addGoods(roleid,50019, Math.ceil(total_fee/2))
ChargeSum.shared.playerCharge(roleid, total_fee, jade);
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg });
} else {
msg = `支付:离线玩家${roleid}充值${jade}仙玉成功,游戏订单:${sdorderno},支付订单:${sdpayno}`
SKLogger.info(msg);
// 充值奖励凤羽道具
this.addGoods(roleid,50019, Math.ceil(total_fee/2))
ChargeSum.shared.playerCharge(roleid, total_fee, jade);
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg });
}
}
// 系统通知
sysNotice(req: any, res: any) {
let text = req.query.text;
let type = req.query.type; // 1 走马灯 2 聊天框 3 走马灯 + 聊天框
let serverid = req.query.servre_id; // 0 则全服公告
let times = req.query.times; // -1 则永久公告 需入库
let interval = req.query.interval; // 单位 秒
let id = req.query.id; // 消息id
if (!id) {
id = 0;
}
let notice = {
id: id,
text: text,
type: type,
times: times,
interval: interval,
};
NoticeMgr.shared.addNewNotice(notice);
Http.reply(res, { code: MsgCode.SUCCESS, msg: `发送系统通知:${text}成功` });
}
// 同步风雨同舟数据
syncDial(req: any, res: any) {
DialMgr.shared.init();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步宝图数据成功` });
}
// 同步宝图数据
syncTreasure(req: any, res: any) {
LotteryMgr.shared.init();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步宝图数据成功` });
}
// 同步签到数据
syncSignIn(req: any, res: any) {
SignInMgr.shared.readDB();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步签到数据成功` });
}
// 同步新鲜玩意数据
syncFresh(req: any, res: any) {
MallMgr.shared.syncFresh();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步新鲜玩意数据成功` });
}
// 同步强化材料数据
syncIntensify(req: any, res: any) {
MallMgr.shared.syncIntensify();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步强化材料数据成功` });
}
// 同步限购商店
syncQuota(req: any, res: any) {
MallMgr.shared.syncQuota();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步限购数据成功` });
}
// 同步每日推荐
syncRecommend(req: any, res: any) {
MallMgr.shared.syncRecommend();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步每日推荐数据成功` });
}
// 同步积分商店
syncIntegral(req: any, res: any) {
MallMgr.shared.syncIntegral();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步积分商店数据成功` });
}
// 同步绑定商店
syncBindJade(req: any, res: any) {
MallMgr.shared.syncBindJade();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步绑定商店数据成功` });
}
// 同步碎片商店
syncDebris(req: any, res: any) {
DebrisMall.shared.init();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步碎片商店数据成功` });
}
// 同步在线奖励
syncOnlineRewards(req: any, res: any) {
OnlineRewards.shared.init();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步在线奖励数据成功` });
}
// 同步限购商店
syncKuiNot(req: any, res: any) {
ZhenbukuiMgr.shared.init();
Http.reply(res, { code: MsgCode.SUCCESS, msg: `同步甄不亏数据成功` });
}
deleteNotice(req: any, res: any) {
let id = req.query.id;
NoticeMgr.shared.delNotice(id);
Http.reply(res, { errcode: MsgCode.SUCCESS });
}
can_speak(req: any, res: any) {
let roleid = req.query.roleid;
let state = req.query.state;
GMMgr.shared.can_speak(roleid, state);
Http.reply(res, { code: MsgCode.SUCCESS });
}
clearPCache(req: any, res: any) {
let ip = this.getClientIP(req, res);
if (ip != GameConf.gate_ip) {
return;
}
let roleid = req.query.roleid;
PlayerMgr.shared.clearPlayerCache(roleid);
res.end(SKDataUtil.toJson({
ret: `操作完成`,
}, "{}"));
}
kickedOut(req: any, res: any) {
let roleids = req.query.roleids;
let sign = req.query.sign; // 签名
if (sign != GameConf.sign) {
Http.reply(res, {
code: MsgCode.FAILED,
msg: `你是傻逼吗!`
});
return;
}
PlayerMgr.shared.kickedOutPlayer(roleids);
}
/*
*
*/
setChargeActivity(req: any, res: any) {
let start = parseInt(req.query.start);
let end = parseInt(req.query.end);
GMMgr.shared.setChargeActivity(start, end);
Http.reply(res, { errcode: 0, });
}
/*
*
*/
closeChargeActivity(req: any, res: any) {
GMMgr.shared.closeChargeActivity();
Http.reply(res, { errcode: 0, });
}
// 加仙玉
addJade(req: any, res: any) {
let roleId = req.query.roleId;
let jade: number = parseInt(req.query.jade);
jade = Math.min(100000000, jade);
let player = PlayerMgr.shared.getPlayerByRoleId(roleId);
if (player) {
player.addMoney(GameUtil.goldKind.Jade, jade, "系统加仙玉");
let info = `玩家[${player.roleid}:${player.name}]加${jade}仙玉成功`;
SKLogger.debug(info);
Http.reply(res, {
code: MsgCode.SUCCESS,
msg: info
});
return;
}
let info = `玩家[${roleId}}]加${jade}仙玉失败`;
Http.reply(res, {
code: MsgCode.FAILED,
msg: info
});
}
// 加经验
addExp(req: any, res: any) {
let roleId = req.query.roleId;
let exp: number = parseInt(req.query.exp);
exp = Math.min(999999999999, exp);
let player = PlayerMgr.shared.getPlayerByRoleId(roleId);
if (player) {
player.addExp(exp);
let info = `玩家[${player.roleid}:${player.name}]增加${exp}经验成功`;
Http.reply(res, {
code: MsgCode.SUCCESS,
msg: info
});
return;
}
DB.addExp(roleId, exp, (code: any) => {
Http.reply(res, {
code: code
});
});
}
//模拟战斗
testBattle(req: any, res: any){
let roleId = req.query.roleId;
let eroleId = req.query.eroleid;
let player = PlayerMgr.shared.getPlayerByRoleId(roleId);
if(player){
JingJiChang.shared.battleStart(roleId,eroleId);
Http.reply(res, { code: MsgCode.SUCCESS });
return;
}
Http.reply(res, { code: MsgCode.FAILED });
}
//测试http线程锁死情况下 http链接能否处理
testSleep(){
SKLogger.info("test slerrp...............")
var start = (new Date()).getTime();
while ((new Date()).getTime() - start < 5 * 60* 1000) { //卡死5分钟
// 使用 continue 实现;
continue;
}
SKLogger.info("test slerrp...............success")
}
// 加道具
addItem(req: any, res: any) {
let roleId = req.query.roleId;
let item: number = parseInt(req.query.item);
let num: number = parseInt(req.query.num);
let player = PlayerMgr.shared.getPlayerByRoleId(roleId);
// 在线玩家发放道具
if (player != null) {
if (player.addItem(item, num, true, "")) {
Http.reply(res, { code: MsgCode.SUCCESS });
} else {
Http.reply(res, { code: MsgCode.FAILED });
}
return;
}
// 离线玩家道具发放
DB.loginByRoleid(roleId, (code: number, data: any) => {
if (code != MsgCode.SUCCESS || data == null) {
Http.reply(res, { code: MsgCode.FAILED });
return;
}
let player = new Player();
player.loaded = true;
player.setDB(data);
if (player.addItem(item, num, true, "")) {
player.offline = false;
player.saveAll((failed: string[]) => {
player.offline = true;
if (failed.length > 0) {
SKLogger.warn(`玩家[${player.roleid}:${player.name}]加入存档道具失败!`);
Http.reply(res, { code: MsgCode.FAILED });
} else {
SKLogger.warn(`玩家[${player.roleid}:${player.name}]加入存档道具成功!`);
Http.reply(res, { code: MsgCode.SUCCESS });
}
});
return;
}
SKLogger.warn(`玩家[${player.roleid}:${player.name}]加入道具失败!`);
Http.reply(res, { code: MsgCode.FAILED });
});
}
//发送天策符
addOfuda(req: any, res: any){
let roleId = req.query.roleId;
let name = req.query.name;
let grade = req.query.grade;
let addition = req.query.addition;
let ofudaobj = Ofuda.shared.createOfuda({
roleid: parseInt(roleId),
name: name,
grade: grade,
addition: addition
});
if(ofudaobj == null){
Http.reply(res, { code: MsgCode.FAILED });
return;
}
let player = PlayerMgr.shared.getPlayerByRoleId(roleId);
// 在线玩家发放道具
if (player) {
if (Ofuda.shared.pofuda_map.has(player.roleid)) {//map里有没有这个key值
Ofuda.shared.pofuda_map.get(player.roleid).push(ofudaobj)
} else {
let list = [];
list.push(ofudaobj)
Ofuda.shared.pofuda_map.set(player.roleid, list);
}
Http.reply(res, { code: MsgCode.SUCCESS });
return;
}else {
Http.reply(res, { code: MsgCode.FAILED });
return;
}
}
// 充值发送道具
addGoods(roleId: any,item: number,num:number){
if (GameConf.integral){
let player = PlayerMgr.shared.getPlayerByRoleId(roleId);
// 在线玩家发放道具
if (player != null) {
player.addItem(item, num, true, "")
return;
}
// 离线玩家道具发放
DB.loginByRoleid(roleId, (code: number, data: any) => {
if (code != MsgCode.SUCCESS || data == null) {
return;
}
let player = new Player();
player.loaded = true;
player.setDB(data);
if (player.addItem(item, num, true, "")) {
player.offline = false;
player.saveAll((failed: string[]) => {
player.offline = true;
if (failed.length > 0) {
SKLogger.warn(`玩家[${player.roleid}:${player.name}]加入存档道具失败!`);
} else {
SKLogger.warn(`玩家[${player.roleid}:${player.name}]加入存档道具成功!`);
}
});
return;
}
SKLogger.warn(`玩家[${player.roleid}:${player.name}]加入道具失败!`);
});
}
}
// 加称谓
addTitle(req: any, res: any) {
let role_id = req.query.role_id;
let type = req.query.type;
let title_id = req.query.title_id;
let value = req.query.value;
let onload = req.query.onload;
let player = PlayerMgr.shared.getPlayerByRoleId(role_id);
if (player) {
player.addTitle(type, title_id, value, onload);
} else {
DB.addTitle(role_id, type, title_id, (code: number, msg: string) => {
});
}
Http.reply(res, { code: MsgCode.SUCCESS });
}
// 提现更改
withdrawState(req: any, res: any) {
let state = req.query.state;
let serial = req.query.serial;
let role_id = req.query.role_id;
let flag: boolean = Currency.shared.update_withdraw_state(role_id,{state:state,serial:serial});
if (flag){
Http.reply(res, { code: MsgCode.SUCCESS });
return;
}
Http.reply(res, { code: MsgCode.FAILED });
return;
}
// 获得现金
obtainCurrency(req: any, res: any) {
let msg = req.query.msg;
let role_id = req.query.role_id;
let player = PlayerMgr.shared.getPlayerByRoleId(role_id);
if (player) {
Currency.shared.gm_obtain_currency(player,msg);
Http.reply(res, { code: MsgCode.SUCCESS });
return;
}
Http.reply(res, { code: MsgCode.FAILED });
return;
}
// 清理玩家任务
closeTask(req: any, res: any) {
let role_id = req.query.roleId;
let player = PlayerMgr.shared.getPlayerByRoleId(role_id);
if (player) {
player.F5_Task();
}
Http.reply(res, { code: MsgCode.SUCCESS });
}
// 恢复数据
async rollbackPlayer(req: any, res: any) {
let role_id = req.query.roleId;
let msg = "";
// 先进行清理角色
let player = PlayerMgr.shared.player_role_list[role_id];
if (player){
player.destroy();
delete PlayerMgr.shared.player_role_list[player.roleid];
delete PlayerMgr.shared.player_only_list[player.onlyid];
}
// 获取角色缓存
let role = await SKRedisUtil.getValue(role_id.toString());
let pet = await SKRedisUtil.getValue(role_id + "pet");
let scheme = await SKRedisUtil.getValue(role_id + "scheme");
let hourse = await SKRedisUtil.getValue(role_id + "hourse");
let hourseskill = await SKRedisUtil.getValue(role_id + "hourseskill");
// 数据不为undefined
if (role != undefined){
let callback = (ret: any, item: any) => {
if (ret == MsgCode.SUCCESS) {
msg = "成功";
Http.reply(res, {code: MsgCode.SUCCESS, msg: msg});
} else {
msg = "失败";
Http.reply(res, {code: MsgCode.SUCCESS, msg: msg});
}
DB.saveSignIn(SKDataUtil.toJson(role.daySignIn,"{}"), role_id, role.mendDate,(code: number, msg: string) => {
let info = `存档:[${role_id}:${role.dbinfo.name}]签到数据存档`;
if (code == MsgCode.SUCCESS) {
info += `成功!`;
SKLogger.debug(info);
} else {
info += `失败[${msg}]!`;
SKLogger.warn(info);
}
});
DB.saveDial(role_id, role.dial_num,role.dial_count,role.dial_date,(code: number, msg: string) => {
let info = `存档:[${role_id}:${role.dbinfo.name}]风雨转盘数据存档`;
if (code == MsgCode.SUCCESS) {
info += `成功!`;
SKLogger.debug(info);
} else {
info += `失败[${msg}]!`;
SKLogger.warn(info);
}
});
DB.savePetsRedis(pet, role_id, (code: number, msg: string) => {
let info = `存档:[${role_id}:${role.dbinfo.name}]召唤兽存档`;
if (code == MsgCode.SUCCESS) {
info += `成功!`;
SKLogger.debug(info);
} else {
info += `失败[${msg}]!`;
SKLogger.warn(info);
}
});
// 保存套装
DB.saveSchemeRedis(scheme, (code: number, msg: string) => {
});
DB.saveHorseList(role_id, hourse, (error: any, rows: any[]) => {
if (error != null) {
SKLogger.warn(`存档:玩家[${role_id}:坐骑列表存档失败[${DB.errorInfo(error)}]!`);
} else {
SKLogger.debug(`存档:玩家[${role_id}:坐骑列表存档成功!`);
}
});
DB.saveHorseSkillList(role_id, hourseskill, (error: any, rows: any[]) => {
if (error != null) {
SKLogger.warn(`存档:玩家[${role_id}:坐骑技能存档失败[${DB.errorInfo(error)}]!`);
} else {
SKLogger.debug(`存档:玩家[${role_id}:坐骑技能存档完成!`);
}
});
callback = null;
}
DB.savePlayerInfo(role_id, role.dbinfo, callback);
}else {
Http.reply(res, {code: MsgCode.FAILED, msg: "缓存数据中没有该玩家信息"});
}
}
// 创建机器人
createRobot(req: any, res: any) {
RobotMgr.shared.createRobotOn(req.query.num,(code,count) => {
let msg = `以创建机器人:${count}`;
Http.reply(res, { code: code, msg: msg });
});
}
// 清理机器人
clearRobot(req: any, res: any) {
RobotMgr.shared.remoteAllRobot(req.query.num,(code,count) => {
let msg = `以清理机器人:${count}`;
Http.reply(res, { code: code, msg: msg });
});
}
// 清除玩家每日存档
clearDay(req: any, res: any) {
let roleId = req.query.roleId;
let type: number = parseInt(req.query.type);
let player = PlayerMgr.shared.getPlayerByRoleId(roleId);
if (player != null) {
player.clearDayMap();
Http.reply(res, { code: MsgCode.SUCCESS });
return;
}
DB.loginByRoleid(roleId, (code: number, data: any) => {
if (code != MsgCode.SUCCESS || data == null) {
Http.reply(res, { code: MsgCode.FAILED });
return;
}
let player = new Player();
player.offline = false;
player.setDB(data);
player.clearDayMap();
player.saveAll((failed: string[]) => {
player.offline = true;
if (failed.length > 0) {
SKLogger.warn(`玩家[${player.roleid}:${player.name}]清除每日存档失败!`);
Http.reply(res, { code: MsgCode.FAILED });
} else {
SKLogger.debug(`玩家[${player.roleid}:${player.name}]清除每日存档成功!`);
Http.reply(res, { code: MsgCode.SUCCESS });
}
});
})
}
// 清理所有的玩家每日存档
clearAllDay(req: any, res: any) {
PlayerMgr.shared.clearAllDayCount();
let msg = `服务器[${GameUtil.serverName}][在线玩家数:${GameUtil.online}]已清空所有玩家每日存档!`;
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg });
}
// 控制
control(req: any, res: any) {
let type = (req.query.type ? req.query.type : 0);
let open = (req.query.open ? req.query.open : 1);
let msg = `控制完成`;
if (type == 1) {
let enabled = (open == 1);
if (DugMgr.enabled != enabled) {
DugMgr.enabled = enabled;
msg = `${DugMgr.enabled ? `开启` : `关闭`}今日挖宝!`
SKLogger.info(msg);
}
}
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg });
}
// 全部存档
saveAll(req: any, res: any) {
SKLogger.info(`服务器[${GameUtil.serverName}]正在存档!`);
Launch.shared.saveAll(() => {
let msg = `服务器[${GameUtil.serverName}]存档完成:机器人数[${GameUtil.robotCount}]在线玩家数[${GameUtil.online}]失败总数[${GameUtil.saveFailed.length}]存档总数[${GameUtil.saveTotal}]`;
SKLogger.info(msg)
let data = {
server_id: GameUtil.serverId,
server_name: GameUtil.serverName,
online: GameUtil.online,
saveCount: GameUtil.saveCount,
saveTotal: GameUtil.saveTotal,
saveFailed: GameUtil.saveFailed
}
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg, data: data });
});
}
// 备用存档
saveAllReserve(req: any, res: any){
let player_role_list: any = PlayerMgr.shared.player_role_list
for (let roleId in player_role_list) {
let player = player_role_list[roleId];
if (player != null) {
player.saveAllReserve();
}
}
Http.reply(res, { code: MsgCode.SUCCESS, msg: "备用存档已经在执行中"});
}
// 关服
close(req: any, res: any) {
if (GameUtil.isClose) {
let data = {
server_id: GameUtil.serverId,
server_name: GameUtil.serverName,
online: GameUtil.online,
saveCount: GameUtil.saveCount,
saveTotal: GameUtil.saveTotal,
saveFailed: GameUtil.saveFailed
}
if (Launch.shared.isClose) {
let msg = `服务器[${GameUtil.serverName}]已关服:机器人数[${GameUtil.robotCount}]在线玩家数[${GameUtil.online}]失败总数[${GameUtil.saveFailed.length}]存档总数[${GameUtil.saveTotal}]`;
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg, data: data });
} else {
let msg = `服务器[${GameUtil.serverName}]正在关服:机器人数[${GameUtil.robotCount}]在线玩家数[${GameUtil.online}]存档进度[${GameUtil.saveCount}/${GameUtil.saveTotal}]`;
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg, data: data });
}
return;
}
GameUtil.isClose = true;
SKLogger.info(`正在关闭服务器[${GameUtil.serverName}]!`);
Launch.shared.close(() => {
let msg = `服务器[${GameUtil.serverName}]关服完成:机器人数[${GameUtil.robotCount}]在线玩家数[${GameUtil.online}]失败总数[${GameUtil.saveFailed.length}]存档总数[${GameUtil.saveTotal}]`;
SKLogger.info(msg);
let data = {
server_id: GameUtil.serverId,
server_name: GameUtil.serverName,
online: GameUtil.online,
saveCount: GameUtil.saveCount,
saveTotal: GameUtil.saveTotal,
saveFailed: GameUtil.saveFailed
}
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg, data });
});
}
// 发送邮件
sendMail(req: any, res: any) {
if(!GameConf.mailEnabled){
Http.reply(res, { code: MsgCode.FAILED, msg: `发送邮件:邮件功能未开启`});
return;
}
let mail = new MailData();
let info = mail.parseReq(req);
if (info.length < 1) {
MailMgr.shared.addSystemMail(mail);
let msg = `发送邮件:服务器[${GameUtil.serverName}]发送邮件[${mail.mail_id}:${mail.title}]成功`;
Http.reply(res, { code: MsgCode.SUCCESS, msg: msg });
if(mail.role_id == 0){
PlayerMgr.shared.broadcastEmail()
}else{
let player = PlayerMgr.shared.getPlayerByRoleId(mail.role_id)
if(player){
player.send("s2c_friend_apply", {});
}
}
return;
}
Http.reply(res, { code: MsgCode.FAILED, msg: info });
}
//设置中间件, 判断卡死在哪条消息上
beforeRecv(req: any, res: any, next: any){
SKLogger.info(req.baseUrl)
SKLogger.info(req.originalUrl)
next();
}
// 启动Http服务
start(port: number) {
// 游戏服务器路由
let list: { [key: string]: (req: any, res: any) => void } = {
['login_token']: this.loginToken.bind(this),
['charge_callback']: this.chargeCallback.bind(this),
['sys_notice']: this.sysNotice.bind(this),
['can_speak']: this.can_speak.bind(this),
['delete_notice']: this.deleteNotice.bind(this),
['clear_pcache']: this.clearPCache.bind(this),
['kicked_out']: this.kickedOut.bind(this),
['set_charge_activity']: this.setChargeActivity.bind(this),
['close_charge_activity']: this.closeChargeActivity.bind(this),
['add_jade']: this.addJade.bind(this),
['add_exp']: this.addExp.bind(this),
['add_item']: this.addItem.bind(this),
['add_ofuda']: this.addOfuda.bind(this),
['add_title']: this.addTitle.bind(this),
["clear_day"]: this.clearDay.bind(this),
["clear_all_day"]: this.clearAllDay.bind(this),
// 全部存档
["save_all"]: this.saveAll.bind(this),
// 备用存档
["save_all_reserve"]: this.saveAllReserve.bind(this),
["control"]: this.control.bind(this),
// 恢复数据
["roll_back_player"]: this.rollbackPlayer.bind(this),
// 清理玩家任务
["close_task"]: this.closeTask.bind(this),
// 关服
["close"]: this.close.bind(this),
["send_mail"]: this.sendMail.bind(this),
// 同步风雨同舟数据
["sync_dial"]: this.syncDial.bind(this),
// 同步宝图数据
["sync_treasure"]: this.syncTreasure.bind(this),
// 同步签到数据
["sync_signIn"]: this.syncSignIn.bind(this),
// 同步新鲜玩意数据
["sync_fresh"]: this.syncFresh.bind(this),
// 同步强化材料数据
["sync_intensify"]: this.syncIntensify.bind(this),
// 同步限购商店数据
["sync_quota"]: this.syncQuota.bind(this),
// 同步限购商店数据
["sync_recommend"]: this.syncRecommend.bind(this),
// 同步限购商店数据
["sync_integral"]: this.syncIntegral.bind(this),
// 同步绑定商店数据
["sync_bindjade"]: this.syncBindJade.bind(this),
// 同步甄不亏商店数据
["sync_kui_not"]: this.syncKuiNot.bind(this),
// 同步碎片商城配置
["sync_debris"]: this.syncDebris.bind(this),
// 同步在线奖励配置
["sync_online_rewards"]: this.syncOnlineRewards.bind(this),
// 更改提现状态
["withdraw_state"]: this.withdrawState.bind(this),
// 获得现金
["obtain_currency"]: this.obtainCurrency.bind(this),
// 创建机器人数据
["create_robot"]: this.createRobot.bind(this),
// 清理机器人数据
["clear_robot"]: this.clearRobot.bind(this),
["test_battle"]: this.testBattle.bind(this),
["test"]: this.testSleep.bind(this)
};
for (let key in list) {
this.app.get('/' + key, [this.beforeRecv.bind(this)], list[key]);
}
this.app.listen(port);
}
}