94 lines
2.8 KiB
Lua
94 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 PlayerRecord = oo.class()
|
|
PlayerRecord.recordList = {}
|
|
|
|
function PlayerRecord:Init()
|
|
self:CreateTable()
|
|
end
|
|
|
|
--跨天
|
|
function PlayerRecord:OnNewDay()
|
|
self:CreateTable()
|
|
end
|
|
|
|
--5秒Timer
|
|
function PlayerRecord:On5SecTimer()
|
|
if not skynet.server.gameServer.curServerConfig then
|
|
return
|
|
end
|
|
|
|
self:Save()
|
|
end
|
|
|
|
--创建表
|
|
function PlayerRecord: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 = nil
|
|
for dbIndex = 1, skynet.server.gameConfig.DBInfoConfig.playerTableCount , 1 do
|
|
sql = string.format(sqlUrl.createPlayerRecord , year , month , day )
|
|
skynet.server.db:QueryPlayer( dbIndex , sql )
|
|
end
|
|
end
|
|
|
|
--新增记录
|
|
function PlayerRecord:Add( userId , type , ... )
|
|
local p1,p2,p3,p4,p5,p6,p7,p8 = ...
|
|
local dbIndex = math.floor(userId / 10000000)
|
|
if not self.recordList[ dbIndex ] then
|
|
self.recordList[ dbIndex ] = {}
|
|
end
|
|
local data = {}
|
|
data.p1 = p1
|
|
data.p2 = p2
|
|
data.p3 = p3
|
|
data.p4 = p4
|
|
data.p5 = p5
|
|
data.p7 = p7
|
|
data.p8 = p8
|
|
table.insert( self.recordList[ dbIndex ] , { userId = userId , type = type , data = json:encode(data) } )
|
|
end
|
|
|
|
--保存记录
|
|
function PlayerRecord:Save()
|
|
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 dbIndex, value in pairs(self.recordList) do
|
|
local sql = string.format(sqlUrl.insertRecordToPlayerRecord1 , year , month ,day)
|
|
local saveCount = 0
|
|
|
|
for k, v in pairs(value) do
|
|
pararm = string.format(sqlUrl.insertRecordToPlayerRecord2 , v.userId , v.type , v.data)
|
|
sql = sql .. pararm
|
|
self.recordList[ dbIndex ][ k ] = nil
|
|
saveCount = saveCount + 1
|
|
if saveCount >= skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount then
|
|
break
|
|
end
|
|
end
|
|
|
|
if saveCount > 0 then
|
|
sql = string.sub(sql , 1, -2 ) --去掉最后一个逗号
|
|
local dbData = skynet.server.db:QueryPlayer( dbIndex , sql )
|
|
if dbData and dbData.affected_rows then
|
|
log.info(string.format("保存玩家数据记录 数据库索引 %d 应保存人数 %d 实际保存人数 %d 保存用时 %d 秒", dbIndex , saveCount , dbData.affected_rows , skynet.GetTime() - time ))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
skynet.server.playerRecord = PlayerRecord
|
|
return PlayerRecord |