90 lines
2.8 KiB
Lua
90 lines
2.8 KiB
Lua
local skynet = require "skynet"
|
|
local oo = require "Class"
|
|
local log = require "Log"
|
|
local sqlUrl = require "SqlUrl"
|
|
local serverId = tonumber(skynet.getenv "serverId")
|
|
local db = require "DB"
|
|
local json =require "json"
|
|
local GameRecord = oo.class()
|
|
GameRecord.recordList = {}
|
|
|
|
function GameRecord:Init()
|
|
self:CreateTable()
|
|
end
|
|
|
|
--跨天
|
|
function GameRecord:OnNewDay()
|
|
self:CreateTable()
|
|
end
|
|
|
|
--5秒Timer
|
|
function GameRecord:On5SecTimer()
|
|
if not skynet.server.gameServer.curServerConfig or not skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount then
|
|
return
|
|
end
|
|
|
|
self:Save()
|
|
end
|
|
|
|
--创建表
|
|
function GameRecord:CreateTable()
|
|
local time = skynet.GetTime()
|
|
local year = os.date("*t", time).year
|
|
local month = os.date("*t", time).month
|
|
local day = os.date("*t", time).day
|
|
|
|
local sql = string.format(sqlUrl.createGameRecord , year , month , day )
|
|
skynet.server.db:Query( "game" , sql )
|
|
end
|
|
|
|
--新增记录
|
|
function GameRecord:Add( userId , type , ... )
|
|
if skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount or 0 > 0 then
|
|
local p1,p2,p3,p4,p5,p6,p7,p8 = ...
|
|
local data = {}
|
|
data.p1 = p1
|
|
data.p2 = p2
|
|
data.p3 = p3
|
|
data.p4 = p4
|
|
data.p5 = p5
|
|
data.p7 = p7
|
|
data.p8 = p8
|
|
data.recordTime = skynet.server.common:GetStrTime(skynet.GetTime())
|
|
table.insert( self.recordList , { userId = userId , type = type , data = json:encode(data) } )
|
|
end
|
|
end
|
|
|
|
--保存记录
|
|
function GameRecord:Save()
|
|
if skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount > 0 then
|
|
local pararm = nil
|
|
local time = skynet.GetTime()
|
|
local year = os.date("*t", time).year
|
|
local month = os.date("*t", time).month
|
|
local day = os.date("*t", time).day
|
|
|
|
for k, v in pairs(self.recordList) do
|
|
local sql = string.format(sqlUrl.insertRecordToGameRecord1 , year , month ,day)
|
|
local saveCount = 0
|
|
|
|
pararm = string.format(sqlUrl.insertRecordToGameRecord2 , v.userId , v.type , v.data)
|
|
sql = sql .. pararm
|
|
self.recordList[ k ] = nil
|
|
saveCount = saveCount + 1
|
|
if saveCount >= skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount then
|
|
break
|
|
end
|
|
|
|
if saveCount > 0 then
|
|
sql = string.sub(sql , 1, -2 ) --去掉最后一个逗号
|
|
local dbData = skynet.server.db:Query( "game" , sql )
|
|
if dbData and dbData.affected_rows then
|
|
log.debug(string.format("保存游戏数据记录 应保存数量 %d 实际保存数量 %d 保存用时 %d 秒", saveCount , dbData.affected_rows , skynet.GetTime() - time ))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
skynet.server.gameRecord = GameRecord
|
|
return GameRecord |