local skynet = require "skynet" local oo = require "Class" local log = require "Log" local redisKeyUrl = require "RedisKeyUrl" local sqlUrl = require "SqlUrl" local ActivityList = oo.class() --[[ CMD_C2S_ActivityList = 1025; //活动列表 CMD_S2C_ActivityList = 1026; CMD_C2S_ActivityOP = 1027; //活动操作 CMD_S2C_ActivityOP = 1028; //活动信息 message PBActivityInfo { int32 id = 1; //活动ID int32 type = 2; //活动ID int32 startTime = 3; //开始时间 int32 endTime = 4; //结束时间 int32 status = 5; //状态 } //活动列表 message C2SActivityList { } //活动列表 message S2CActivityList { repeated PBActivityInfo activityList = 1; //活动列表 } ]] ActivityList.Type_Test = 1 --春节活动 ActivityList.Status_Init = 1 --未开始 ActivityList.Status_Start = 2 --已经开始 ActivityList.Status_Stop = 3 --停止 ActivityList.ActivityEvent_Ten = 1 ActivityList.ActivityType_Schedule = 1 --间隔多久执行一次 function ActivityList:Init() self.activityList = {} end function ActivityList:OnNewDay() --跨天 end --每5秒调一次 function ActivityList:On5SecTimer() self:Refresh() end --获取所有活动信息 function ActivityList:GetActivityList( c2sData , s2cData ) local data = {} data.activityList = self.activityList s2cData.cmd = pb.enum("MsgType","CMD_S2C_ActivityList") s2cData.data = assert(pb.encode("S2CActivityList", data)) end --新增活动 function ActivityList:Add( activityEvent , activityType , timerInfo ) --获取活动ID local redisKey = string.format(redisKeyUrl.MultiServerActivityID ) local id = skynet.server.redis:incr(redisKey) if not self.activityList[ id ] then self.activityList[ id ] = {} end local startTime,endTime = self:CalcTime( activityType , timerInfo ) self.activityList[ id ].id = id self.activityList[ id ].activityEvent = activityEvent self.activityList[ id ].activityType = activityType self.activityList[ id ].timerInfo = timerInfo self.activityList[ id ].startTime = startTime self.activityList[ id ].endTime = endTime self.activityList[ id ].status = self.Status_Init log.info(string.format("新增活动信息 ID %d 类型 %d 开始时间 %d 结束时间 %d 状态 %d" , id , activityType , startTime , endTime , self.Status_Init)) return true end --计算开启时间 function ActivityList:CalcTime( activityType , timerInfo ) local startTime,endTime = 0,0 if self.ActivityType_Schedule == activityType then --定时任务 startTime,endTime = timerInfo.startTime,timerInfo.endTime end return startTime,endTime end --删除活动 function ActivityList:Delete( id ) if self.activityList[ id ] then self.activityList[ id ] = nil end log.info(string.format("删除活动信息 ID %d" , id )) end --开始活动 function ActivityList:Start( id ) if not self.activityList[ id ] then return end self.activityList[ id ].status = self.Status_Start log.info(string.format("活动信息 ID %d 开始" , id )) end --开始活动 function ActivityList:Stop( id ) if not self.activityList[ id ] then return end self.activityList[ id ].status = self.Status_Stop log.info(string.format("活动信息 ID %d 停止" , id )) end --刷新 function ActivityList:Refresh() local sql = nil for k, v in pairs(self.activityList) do if self.Status_Stop == v.status and skynet.GetTime() >= v.startTime and skynet.GetTime() <= v.endTime then v.status = self.Status_Start log.info(string.format("活动 ID %d 已经开始 活动类型为 %d " , v.id , v.type )) elseif self.Status_Start == v.status and skynet.GetTime() > v.endTime then v.status = self.Status_Stop --计算下一次活动时间 local startTime,endTime = self:CalcTime( v.activityType , v.timerInfo ) v.startTime = startTime v.endTime = endTime log.info(string.format("活动 ID %d 已经结束 活动类型为 %d " , v.id , v.type )) end end end --活动是否开始 function ActivityList:IsStart( type ) for k, v in pairs(self.activityList) do if type == v.type and self.Status_Start == v.status then return true end end return false end --获取活动类型 function ActivityList:GetType( id ) for k, v in pairs(self.activityList) do if id == v.id then return v.type end end return nil end --通知所有玩家活动消息 function ActivityList:NoticeAllUser( type , status ) local playerList = skynet.server.playerCenter:GetPlayerList() for k, v in pairs(playerList) do local data = {} data.type = type data.status = status --skynet.server.gameServer:SendMsgToUser( userId , "CMD_S2C_Activity", userData) end end skynet.server.activityList = ActivityList return ActivityList