181 lines
6.5 KiB
Lua
181 lines
6.5 KiB
Lua
local skynet = require "skynet"
|
|
local oo = require "Class"
|
|
local log = require "Log"
|
|
local defense = require "Defense"
|
|
local json =require "json"
|
|
local sqlUrl = require "SqlUrl"
|
|
local curServerId = tonumber(skynet.getenv "serverId")
|
|
local cmd = require "GameCmd"
|
|
local manageCmd = require "ManageCmd"
|
|
local clusterServer = require "ClusterServer"
|
|
local ServerManage = oo.class()
|
|
|
|
function ServerManage:Init()
|
|
end
|
|
|
|
--每5秒调一次
|
|
function ServerManage:On5SecTimer()
|
|
|
|
end
|
|
|
|
--执行服务器命令
|
|
function ServerManage:DoManageCmd( c2sData , s2cData)
|
|
local cmd = c2sData.cmd
|
|
local userId = c2sData.userId or nil
|
|
local value = c2sData.value or nil
|
|
|
|
s2cData.data = {}
|
|
s2cData.data.serverId = curServerId
|
|
s2cData.data.isSuc = false
|
|
|
|
log.info("执行服务器命令" ,cmd ,userId ,value)
|
|
if cmd > manageCmd.AllServerStart and cmd < manageCmd.AllServerEnd then --所有服务器
|
|
local server = nil --找出对应的服务器信息
|
|
if curServerId == clusterServer.centerServerID then
|
|
server = skynet.server.centerServer
|
|
elseif curServerId >= clusterServer.routerServerMinID and curServerId <= clusterServer.routerServerMaxID then
|
|
server = skynet.server.routerServer
|
|
elseif curServerId == clusterServer.multiServerID then
|
|
server = skynet.server.multiServer
|
|
elseif curServerId >= clusterServer.gameServerMinID and curServerId <= clusterServer.gameServerMaxID then
|
|
server = skynet.server.gameServer
|
|
end
|
|
|
|
if manageCmd.ReloadClusterConfig == cmd then
|
|
self:ReloadClusterConfig( server )
|
|
elseif manageCmd.Reg == cmd then
|
|
self:Reg( server )
|
|
elseif manageCmd.UnReg == cmd then
|
|
self:UnReg( server )
|
|
elseif manageCmd.ShutDown == cmd then
|
|
self:ShutDown( server )
|
|
end
|
|
elseif cmd > manageCmd.MultiServerStart and cmd < manageCmd.MultiServerEnd then --多功能服务器
|
|
elseif cmd > manageCmd.GameServerStart and cmd < manageCmd.GameServerEnd then --游戏服务器
|
|
if manageCmd.NeedPlayerCount == cmd then
|
|
self:NeedPlayerCount( value , s2cData)
|
|
elseif manageCmd.SaveUserToDB == cmd then
|
|
self:SaveUserToDB( userId , s2cData)
|
|
elseif manageCmd.SaveUserToTxt == cmd then
|
|
self:SaveUserToTxt( userId , value , s2cData )
|
|
elseif manageCmd.ForceUserOffline == cmd then
|
|
self:ForceUserOffline( userId , s2cData )
|
|
elseif manageCmd.QueryPlayerInServer == cmd then
|
|
self:QueryPlayerInServer( userId , s2cData )
|
|
end
|
|
else
|
|
s2cData.code = cmd.ErrorCode.ErrRequestParam
|
|
end
|
|
|
|
return s2cData
|
|
end
|
|
|
|
--重新注册服务器
|
|
function ServerManage:ReReg( server )
|
|
server:Reg()
|
|
log.info("成功注册服务")
|
|
end
|
|
|
|
--注销服务器
|
|
function ServerManage:UnReg( server )
|
|
server:UnReg()
|
|
log.info("成功注销服务")
|
|
end
|
|
|
|
--关闭服务器
|
|
function ServerManage:ShutDown( server )
|
|
server:UnReg()
|
|
server:StopServer()
|
|
log.info("成功关闭服务")
|
|
end
|
|
|
|
--关闭服务器
|
|
function ServerManage:ReloadClusterConfig( server )
|
|
server:ReloadClusterNode()
|
|
log.info("成功载入集群配置")
|
|
end
|
|
|
|
--需要玩家数量
|
|
function ServerManage:NeedPlayerCount( value , s2cData)
|
|
skynet.server.gameServer.serverInfo.needPlayerCount = tonumber(value.needCount)
|
|
s2cData.data.isSuc = true
|
|
log.info(string.format("游戏服需要 %d 个玩家", skynet.server.gameServer.serverInfo.needPlayerCount))
|
|
end
|
|
|
|
--保存用户数据到DB
|
|
function ServerManage:SaveUserToDB( userId , s2cData)
|
|
local playerList = skynet.server.playerCenter:GetPlayerList()
|
|
for curUseId, value in pairs( playerList ) do
|
|
if curUseId == userId then
|
|
skynet.server.accountServer:SavePlayerToDB( value.player , true )
|
|
s2cData.data.isSuc = true
|
|
log.info(string.format("玩家 %d 强制将玩家数据保存到DB ", userId ))
|
|
end
|
|
end
|
|
end
|
|
|
|
--保存用户数据到Txt
|
|
function ServerManage:SaveUserToTxt( userId , value , s2cData )
|
|
local playerList = skynet.server.playerCenter:GetPlayerList()
|
|
for curUseId, v in pairs( playerList ) do
|
|
if curUseId == userId then
|
|
local basicInfo = v.player.basicInfo
|
|
local gameData = v.player.gameData
|
|
local archiveData =v.player.archiveData
|
|
|
|
local file = io.open("UserData.txt", "a+")
|
|
file:write( userId )
|
|
if value.isJson then
|
|
file:write( json:encode( basicInfo ))
|
|
file:write("\r\n")
|
|
file:write( json:encode( gameData ))
|
|
file:write("\r\n")
|
|
file:write( json:encode( archiveData ))
|
|
file:write("\r\n")
|
|
log.info(string.format("玩家 %d 强制将玩家数据以Json格式保存到Txt ", userId ))
|
|
s2cData.data.isSuc = true
|
|
else
|
|
file:write( skynet.server.common:TableToString( basicInfo ))
|
|
file:write("\r\n")
|
|
file:write( skynet.server.common:TableToString( gameData ))
|
|
file:write("\r\n")
|
|
file:write( skynet.server.common:TableToString( archiveData ))
|
|
file:write("\r\n")
|
|
log.info(string.format("玩家 %d 强制将玩家数据以文本格式保存到Txt ", userId ))
|
|
s2cData.data.isSuc = true
|
|
end
|
|
file:close()
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
--强制玩家下线
|
|
function ServerManage:ForceUserOffline( userId , s2cData)
|
|
local playerList = skynet.server.playerCenter:GetPlayerList()
|
|
for curUseId, value in pairs( playerList ) do
|
|
if curUseId == userId then
|
|
log.info(string.format("玩家 %d 强制将玩家数据保存到DB ", userId ))
|
|
skynet.server.accountServer:SavePlayerToDB( value.player , true )
|
|
skynet.server.playerCenter:UserExit( userId )
|
|
log.info(string.format("玩家 %d 强制玩家下线 ", userId ))
|
|
s2cData.data.isSuc = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
--查询玩家在哪个游戏服
|
|
function ServerManage:QueryPlayerInServer( userId , s2cData )
|
|
local playerList = skynet.server.playerCenter:GetPlayerList()
|
|
for curUseId, value in pairs( playerList ) do
|
|
if curUseId == userId then
|
|
s2cData.data.isSuc = true
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
skynet.server.serverManage = ServerManage
|
|
return ServerManage |