import { Application, ChannelService, HandlerService, pinus, } from 'pinus'; import { ActivityModel, ActivityModelType } from '../../db/Activity'; import { ServerlistModel } from '../../db/Serverlist'; import { reloadResources } from '../../pubUtils/data'; import { getServerMainten, setServerMainten, stopServerMainten } from '../../services/gmService'; import { taflush } from '../../services/sdkService'; import { ActivityInRemote } from '../../domain/activityField/activityField'; import { errlogger } from '../../util/logger'; import { ActivityGroupModel } from '../../db/ActivityGroup'; const activityByServer: Map = new Map(); // serverId => activityId[]; const activities: Map = new Map(); // activityId => activity const activityByType: Map> = new Map(); // serverId => type => activityId[]; const groupToServer: Map = new Map(); // group => serverId[]; export function clearData() { activityByServer.clear(); activities.clear(); activityByType.clear(); groupToServer.clear(); } export async function loadActivities() { clearData(); let activityGroup = await ActivityGroupModel.findAllActivityGroup(); for(let { groupId, serverIds } of activityGroup) { for(let serverId of serverIds) { if(!groupToServer.has(groupId)) { groupToServer.set(groupId, []); } groupToServer.get(groupId).push(serverId); } } let activityDb = await ActivityModel.findOpenAndComingActivityes(); let activityIds: number[] = []; for(let activity of activityDb) { activities.set(activity.activityId, new ActivityInRemote(activity)); activityIds.push(activity.activityId); } setActivityTypeAndServer(); pinus.app.set('activityByServer', activityByServer); pinus.app.set('activityByType', activityByType); pinus.app.set('activities', activities); pinus.app.set('groupToServer', groupToServer); } export async function setActivityTypeAndServer() { activityByServer.clear(); activityByType.clear(); for(let [_, activity] of activities) { let servers = groupToServer.get(activity.groupId)||[]; for(let serverId of servers) { if(!activityByServer.has(serverId)) { activityByServer.set(serverId, []); } activityByServer.get(serverId).push(activity.activityId); if(!activityByType.has(serverId)) { activityByType.set(serverId, new Map()); } if(!activityByType.get(serverId).has(activity.type)) { activityByType.get(serverId).set(activity.type, []); } activityByType.get(serverId).get(activity.type).push(activity.activityId); } } pinus.app.set('activityByServer', activityByServer); pinus.app.set('activityByType', activityByType); pinus.app.set('activities', activities); pinus.app.set('groupToServer', groupToServer); } export function updateActivities(activityDb: ActivityInRemote[]) { // console.log('******* activities', activities) let activityIds: number[] = []; for(let activity of activityDb) { activities.set(activity.activityId, activity); activityIds.push(activity.activityId); } setActivityTypeAndServer(); } export function deleteActivities(activityIds: number[]) { for(let activityId of activityIds) { activities.delete(activityId); } setActivityTypeAndServer(); } export function saveGroupToServer(groupId: number, serverIds: number[]) { groupToServer.set(groupId, serverIds); setActivityTypeAndServer(); } export function saveActivitiesToGroup(groupId: number, activityDb: number[]) { for(let activityId of activityDb) { if(activities.get(activityId)) { activities.get(activityId).groupId = groupId; } } setActivityTypeAndServer(); } export function _getActivityById(activityId: number) { return activities?.get(activityId); } export function _getActivitiesByType(serverId: number, type: number) { let activityByTypeData = activityByType?.get(serverId)?.get(type)??[]; let activities: Map = pinus.app.get('activities'); let result: ActivityInRemote[] = []; for(let activityId of activityByTypeData) { let activity = activities.get(activityId); if(activity && activity.isEnable) { result.push(activity); } } return result; } export function _getActivitiesByServerId(serverId: number) { let activityByServerId = activityByServer?.get(serverId)||[] let activities: Map = pinus.app.get('activities'); let result: ActivityInRemote[] = []; for(let activityId of activityByServerId) { let activity = activities.get(activityId); if(activity && activity.isEnable) { result.push(activity); } } return result; } export function _getActivities() { try { // console.log('***** activities', activities); let result: ActivityInRemote[] = []; for(let [_, activity] of activities) { result.push(activity); } return result; } catch(e) { console.log('******** activity e', e) } }