diff --git a/game-server/app/servers/activity/remote/activityRemote.ts b/game-server/app/servers/activity/remote/activityRemote.ts index 076cbcfe2..c42131e21 100644 --- a/game-server/app/servers/activity/remote/activityRemote.ts +++ b/game-server/app/servers/activity/remote/activityRemote.ts @@ -8,6 +8,7 @@ import { ActivityInRemote } from '../../../domain/activityField/activityField'; import { errlogger } from '../../../util/logger'; import { ActivityGroupModel } from '../../../db/ActivityGroup'; import { deleteActivities, loadActivities, saveActivitiesToGroup, updateActivities, _getActivityById, _getActivitiesByType, _getActivities, _getActivitiesByServerId } from '../../../services/activity/activityRemoteService'; +import { saveActivityMemory } from '../../../services/log/memoryLogService'; export default function (app: Application) { new HandlerService(app, {}); @@ -139,4 +140,12 @@ export class ActivityRemote { errlogger.error(`remote ${__filename} \n ${e.stack}`); } } + + public saveActivityMemory() { + try { + return saveActivityMemory(); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } } \ No newline at end of file diff --git a/game-server/app/servers/battle/remote/battleRemote.ts b/game-server/app/servers/battle/remote/battleRemote.ts index e6662a1f6..310f4cfe9 100644 --- a/game-server/app/servers/battle/remote/battleRemote.ts +++ b/game-server/app/servers/battle/remote/battleRemote.ts @@ -2,6 +2,7 @@ import { Application, ChannelService, FrontendSession, RemoterClass, HandlerServ import { PVPConfigModel, PVPConfigType } from '../../../db/SystemConfig'; import { reloadResources } from '../../../pubUtils/data'; import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService'; +import { savePvpSeasonMemory } from '../../../services/log/memoryLogService'; import { taflush } from '../../../services/sdkService'; import { errlogger } from '../../../util/logger'; @@ -140,4 +141,12 @@ export class BattleRemote { errlogger.error(`remote ${__filename} \n ${e.stack}`); } } + + public savePvpSeasonMemory() { + try { + return savePvpSeasonMemory(); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } } \ No newline at end of file diff --git a/game-server/app/servers/battle/remote/comBattleRemote.ts b/game-server/app/servers/battle/remote/comBattleRemote.ts index e93eb30de..d6abdd221 100644 --- a/game-server/app/servers/battle/remote/comBattleRemote.ts +++ b/game-server/app/servers/battle/remote/comBattleRemote.ts @@ -4,6 +4,7 @@ import { STATUS } from '../../../consts'; import { handleComBtlProgress, _addToSearchingTeams } from '../../../services/comBattleService'; import { MemComBtlTeam } from '../../../domain/battleField/ComBattleTeamField'; import { errlogger } from '../../../util/logger'; +import { saveComBattleMemory } from '../../../services/log/memoryLogService'; export default function (app: Application) { new HandlerService(app, {}); @@ -44,4 +45,11 @@ export class ComBattleRemote { } } + public saveComBattleMemory() { + try { + return saveComBattleMemory(); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } } \ No newline at end of file diff --git a/game-server/app/servers/connector/remote/connectorRemote.ts b/game-server/app/servers/connector/remote/connectorRemote.ts index a3565b2c6..b013a488b 100644 --- a/game-server/app/servers/connector/remote/connectorRemote.ts +++ b/game-server/app/servers/connector/remote/connectorRemote.ts @@ -10,6 +10,7 @@ import { getServerMainten, setServerMainten, stopServerMainten } from '../../../ import { taflush } from '../../../services/sdkService'; import { errlogger } from '../../../util/logger'; import { setWeek } from '../../../pubUtils/timeUtil'; +import { savePvpSeasonMemory } from '../../../services/log/memoryLogService'; export default function (app: Application) { new HandlerService(app, {}); return new ConnectorRemote(app); @@ -171,4 +172,12 @@ export class ConnectorRemote { errlogger.error(`remote ${__filename} \n ${e.stack}`); } } + + public savePvpSeasonMemory() { + try { + return savePvpSeasonMemory(); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } } diff --git a/game-server/app/servers/gm/handler/gmHandler.ts b/game-server/app/servers/gm/handler/gmHandler.ts index 3f05db883..23a784f78 100644 --- a/game-server/app/servers/gm/handler/gmHandler.ts +++ b/game-server/app/servers/gm/handler/gmHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, pinus } from 'pinus'; import { getRandSingleEelm, resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; import { GMMailModel, GMMailType } from '../../../db/GMMail'; -import { ACTIVITY_TYPE, GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, PUSH_ROUTE, SURVEY_SELECT } from '../../../consts'; +import { ACTIVITY_TYPE, GM_MAIL_STATUS, GM_MAIL_TYPE, MAIL_TIME_TYPE, MEMORY_LOG_TYPE, PUSH_ROUTE, SURVEY_SELECT } from '../../../consts'; import { ActivityModel } from '../../../db/Activity'; import { ActivityGroupModel } from '../../../db/ActivityGroup'; import { ActivityGroupTypeModel } from '../../../db/ActivityGroupType'; @@ -16,6 +16,8 @@ import { SurveyModel, SurveyUpdate } from '../../../db/Survery'; import { getSurvey } from '../../../services/gmService'; import { sendMessageToAllWithSuc } from '../../../services/pushService'; import { sendMailByContent, sendMailsByGmMail } from '../../../services/mailService'; +import { saveMemory } from '../../../services/log/memoryLogService'; + let timer: NodeJS.Timer; export default function (app: Application) { return new GmHandler(app); @@ -276,4 +278,10 @@ export class GmHandler { return resResult(STATUS.SUCCESS); } + + async saveMemoryLog(msg: { memoryLogType: MEMORY_LOG_TYPE }, session: BackendSession) { + const { memoryLogType } = msg; + await saveMemory(memoryLogType); + return resResult(STATUS.SUCCESS); + } } \ No newline at end of file diff --git a/game-server/app/servers/gm/handler/gmRoleHandler.ts b/game-server/app/servers/gm/handler/gmRoleHandler.ts index 40fe2be5f..3abf0c33f 100644 --- a/game-server/app/servers/gm/handler/gmRoleHandler.ts +++ b/game-server/app/servers/gm/handler/gmRoleHandler.ts @@ -6,7 +6,7 @@ import { addItems } from '../../../services/role/rewardService'; import { RewardInter } from '../../../pubUtils/interface'; import { gameData, getExpByLv, getHeroExpByLv, getHeroLvByExp, getLvByExp } from '../../../pubUtils/data'; import { RoleModel, RoleType, WarStar } from '../../../db/Role'; -import { BLOCK_TYPE, DEFAULT_HEROES, GUILD_AUTH, GUILD_DISMISS_WAY, GUILD_JOB, GUILD_MASTER_CHANGE_WAY, GUILD_STATUS, GUILD_STRUCTURE, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, MAIL_TYPE, PUSH_ROUTE, REDIS_KEY, TA_EVENT, WAR_TYPE } from '../../../consts'; +import { BLOCK_TYPE, DEFAULT_HEROES, GUILD_AUTH, GUILD_DISMISS_WAY, GUILD_JOB, GUILD_MASTER_CHANGE_WAY, GUILD_STATUS, GUILD_STRUCTURE, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, MAIL_TYPE, MEMORY_LOG_TYPE, PUSH_ROUTE, REDIS_KEY, TA_EVENT, WAR_TYPE } from '../../../consts'; import { GuildFormParam, SetHeroParam } from '../../../domain/backEndField/params'; import { GuildModel, GuildUpdateParam } from '../../../db/Guild'; import { Rank } from '../../../services/rankService'; diff --git a/game-server/app/servers/guild/remote/guildActivityRemote.ts b/game-server/app/servers/guild/remote/guildActivityRemote.ts index d42ff6733..dd7cd290d 100644 --- a/game-server/app/servers/guild/remote/guildActivityRemote.ts +++ b/game-server/app/servers/guild/remote/guildActivityRemote.ts @@ -5,6 +5,7 @@ import { setWeek } from '../../../pubUtils/timeUtil'; import { sendUngotDividend } from '../../../services/auctionService'; import { errlogger } from '../../../util/logger'; import { GUILD_ACTIVITY_TYPE } from '../../../consts'; +import { saveGuildActivityIndexMemory } from '../../../services/log/memoryLogService'; export default function (app: Application) { new HandlerService(app, {}); @@ -213,4 +214,12 @@ export class GuildActivityRemote { errlogger.error(`remote ${__filename} \n ${e.stack}`); } } + + public saveGuildActivityIndexMemory() { + try { + return saveGuildActivityIndexMemory(); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } } \ No newline at end of file diff --git a/game-server/app/services/log/memoryLogService.ts b/game-server/app/services/log/memoryLogService.ts new file mode 100644 index 000000000..e0c7109fd --- /dev/null +++ b/game-server/app/services/log/memoryLogService.ts @@ -0,0 +1,114 @@ +import { pinus } from "pinus"; +import { GUILD_ACTIVITY_TYPE, MEMORY_LOG_TYPE } from "../../consts"; +import { ActivityInRemote } from "../../domain/activityField/activityField"; +import { MemComBtlTeam } from "../../domain/battleField/ComBattleTeamField"; +import { saveMemoryLog, saveMemoryLogs } from "../../pubUtils/logUtil"; +import { getGAIndexInPinus } from "../guildActivity/guildActivityService"; + +// 将内存打印下来 +export async function saveMemory(type: MEMORY_LOG_TYPE) { + switch (type) { + case MEMORY_LOG_TYPE.ACTIVITY: + await _saveActivityMemory(); + break; + case MEMORY_LOG_TYPE.PVP_SEASON: + await _savePvpSeasonMemory(); + break; + case MEMORY_LOG_TYPE.GA_INDEX: + await _saveGuildActivityIndexMemory(); + break; + case MEMORY_LOG_TYPE.COMBATTLE: + await _saveComBattleMemory(); + break; + } +} + +async function _saveActivityMemory() { + await pinus.app.rpc.activity.activityRemote.saveActivityMemory.broadcast(); +} + +// activity服 +export async function saveActivityMemory() { + await saveMemoryLogs(pinus.app.getServerId(), [ + { memoryLogField: 'activities', memoryData: treatActivities(pinus.app.get('activities')) }, + { memoryLogField: 'activityByServer', memoryData: treatActivityByServer(pinus.app.get('activityByServer')) }, + { memoryLogField: 'activityByType', memoryData: treatActivityType(pinus.app.get('activityByType')) }, + { memoryLogField: 'groupToServer', memoryData: treatGroupToServer(pinus.app.get('groupToServer')) }, + ]); +} + +function treatActivities(activities: Map = new Map()) { + let result: ActivityInRemote[] = []; + for(let [_, activity] of activities) { + result.push(activity); + } + return JSON.stringify(result); +} + +function treatActivityByServer(activityByServer: Map = new Map()) { + let result: { serverId: number, activityIds: number[] }[] = []; + for(let [ serverId, activityIds ] of activityByServer) { + result.push({ serverId, activityIds }); + } + return JSON.stringify(result); +} + +function treatActivityType(activityByType: Map> = new Map()) { + let result: { serverId: number, type: number, activityIds: number[] }[] = []; + for(let [ serverId, typeToActivity ] of activityByType) { + for(let [ type, activityIds ] of typeToActivity) { + result.push({ serverId, type, activityIds }); + } + } + return JSON.stringify(result); +} + +function treatGroupToServer(groupToServer: Map = new Map()) { + let result: { groupId: number, serverIds: number[] }[] = []; + for(let [groupId, serverIds] of groupToServer) { + result.push({ groupId, serverIds }); + } + return JSON.stringify(result); +} + +async function _savePvpSeasonMemory() { + await pinus.app.rpc.battle.battleRemote.savePvpSeasonMemory.broadcast(); + await pinus.app.rpc.connector.connectorRemote.savePvpSeasonMemory.broadcast(); +} + +export async function savePvpSeasonMemory() { + let data = { + pvpSeasonNum: pinus.app.get('pvpSeasonNum'), + pvpSeasonEndTime: pinus.app.get('pvpSeasonEndTime') + } + await saveMemoryLog(pinus.app.getServerId(), 'pvpSeason', JSON.stringify(data)); +} + +async function _saveGuildActivityIndexMemory() { + await pinus.app.rpc.guild.guildActivityRemote.saveGuildActivityIndexMemory.broadcast(); +} + +export async function saveGuildActivityIndexMemory() { + let data = { + gateActivity: getGAIndexInPinus(GUILD_ACTIVITY_TYPE.GATE_ACTIVITY), + cityActivity: getGAIndexInPinus(GUILD_ACTIVITY_TYPE.CITY_ACTIVITY), + raceActivity: getGAIndexInPinus(GUILD_ACTIVITY_TYPE.RACE_ACTIVITY), + } + await saveMemoryLog(pinus.app.getServerId(), 'gaIndex', JSON.stringify(data)); +} + +async function _saveComBattleMemory() { + await pinus.app.rpc.battle.comBattleRemote.saveComBattleMemory.broadcast(); +} + +export async function saveComBattleMemory() { + await saveMemoryLog(pinus.app.getServerId(), 'comBattle', treatTeamMap(pinus.app.get('teamMap'))); +} + +function treatTeamMap(teamMap: Map = new Map()) { + let result: MemComBtlTeam[] = []; + for(let [_teamCode, team] of teamMap) { + result.push(team); + } + return JSON.stringify(result); +} \ No newline at end of file diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index c450ac1f6..23c5b92db 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -1118,6 +1118,14 @@ export enum LOG_TYPE { GATE_HP = 'gateHp', // 诸侯混战城门 BOSS_HP = 'bossHp', // 演武台boss血量 REBIRTH = 'rebirth', // 演武台boss血量 + MEMORY = 'memory', // 保存内存 +} + +export enum MEMORY_LOG_TYPE { + ACTIVITY = 'activity', // 活动 + PVP_SEASON = 'pvpSeason', // pvp赛季 + GA_INDEX = 'gaIndex', // 军团活动index + COMBATTLE = 'comBattle', // 寻宝活动 } export enum CE_CHANGE_REASON { diff --git a/shared/db/UserLog.ts b/shared/db/UserLog.ts index f32e1ac82..50eb6ccc9 100644 --- a/shared/db/UserLog.ts +++ b/shared/db/UserLog.ts @@ -62,7 +62,7 @@ export default class UserLog extends BaseModel { @prop({ required: false }) uid: number; // uid - @prop({ required: true }) + @prop({ required: false }) serverId: number; // 小区id @prop({ required: false }) @@ -168,11 +168,26 @@ export default class UserLog extends BaseModel { @prop({ required: false }) heroInfo: string; // 武将信息 + // 内存 + @prop({ required: false }) + sid: string; // 线程 + + @prop({ required: false }) + memoryLogField: string; // 类型 + + @prop({ required: false }) + memoryData: string; // 内存数据 + public static async createRecord(params: UserLogModelTypeParam) { const r = await UserLogModel.insertMany(params); return r; } + public static async createRecords(params: UserLogModelTypeParam[]) { + const r = await UserLogModel.insertMany(params); + return r; + } + private static getSearchObj(form: SearchUserLogParam) { let searchObj = {}; if (form.type) searchObj['type'] = form.type; diff --git a/shared/pubUtils/logUtil.ts b/shared/pubUtils/logUtil.ts index 9a84f7d15..b9d848e2d 100644 --- a/shared/pubUtils/logUtil.ts +++ b/shared/pubUtils/logUtil.ts @@ -135,4 +135,23 @@ export async function saveRebirthLog(session: any, hero: HeroType) { } catch (e) { console.error(e); } +} + +export async function saveMemoryLog(sid: string, memoryLogField: string, memoryData: string) { + try { + await UserLogModel.createRecord({ type: LOG_TYPE.MEMORY, sid, memoryLogField, memoryData }); + } catch (e) { + console.error(e); + } +} + +export async function saveMemoryLogs(sid: string, arr: { memoryLogField: string, memoryData: string} []) { + try { + let params = arr.map(({ memoryLogField, memoryData }) => { + return { type: LOG_TYPE.MEMORY, sid, memoryLogField, memoryData } + }) + await UserLogModel.createRecords(params); + } catch (e) { + console.error(e); + } } \ No newline at end of file diff --git a/shared/resource/jsons/dic_api.json b/shared/resource/jsons/dic_api.json index 7c749afd8..7202ac7f0 100644 --- a/shared/resource/jsons/dic_api.json +++ b/shared/resource/jsons/dic_api.json @@ -880,5 +880,12 @@ "name": "补单", "module": "order", "type": "update" + }, + { + "id": 127, + "api": "gm.gmHandler.saveMemoryLog", + "name": "保存内存", + "module": "sys", + "type": "update" } ] \ No newline at end of file