dbseed.lua 4.25 KB
require "shared.init"
require "utils.init"
require "GlobalVar"
require "RedisKeys"
require "ProtocolCode"
require "skynet.manager"

skynet = require "skynet"

redisproxy = require("shared.redisproxy")
mysqlproxy = require "shared.mysqlproxy"

SendPacket = function ( ... ) end

local function initRedisDb( ... )
	local servId = tonumber(skynet.getenv("servId"))
	if servId then
		redisproxy:hsetnx("autoincrement_set", "role", servId * MAX_ROLE_NUM)
		redisproxy:hsetnx("autoincrement_set", "union", servId * MAX_ROLE_NUM)
		redisproxy:hsetnx("autoincrement_set", "trade", servId * MAX_ROLE_NUM * 100)
		redisproxy:hsetnx("autoincrement_set", "email", 0)
		redisproxy:hsetnx("autoincrement_set", "emailTimestamp", 0)
		redisproxy:hsetnx("autoincrement_set", "delay_email", 0)
		redisproxy:hsetnx("adv_season", "idx", 0)
		redisproxy:hsetnx("adv_season", "chapter", globalCsv.adv_endless_default_chapter)
		redisproxy:hsetnx("adv_season", "overTime", 0)
	end
end

-- 初始化服务器数据库以及服务器信息表
local function initServerDatabase()
	local servId = skynet.getenv("servId")
	mysqlproxy:query(string.format("CREATE DATABASE IF NOT EXISTS server_%s DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci;", servId))
	mysqlproxy:query(string.format("use server_%s", servId))

	-- 服务器信息表 开服时间
	mysqlproxy:query [[
		CREATE TABLE IF NOT EXISTS `server_info` (
			`key` varchar(45) NOT NULL,
			`int_value` int(11) DEFAULT NULL,
			`str_value` varchar(128) DEFAULT NULL,
			PRIMARY KEY (`key`)
			) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
	]]

	local res = mysqlproxy:query("SELECT * FROM `server_info` where `key` = 'server_start';")
	if not next(res) then
		mysqlproxy:query(string.format("INSERT INTO `server_info`(`key`, `str_value`) VALUES('server_start', '%s');",
			os.date("%Y%m%d", skynet.timex())))
	end
end

local function initAutoIncreUidTable()
	mysqlproxy:query [[
		CREATE TABLE IF NOT EXISTS `auto_increment_uid` (
			`key` varchar(45) NOT NULL,
			`value` int(11) DEFAULT NULL,
			PRIMARY KEY (`key`)
			) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
	]]
	local servId = tonumber(skynet.getenv("servId"))
	if servId then
		local tpl = "INSERT INTO `auto_increment_uid`(`key`, `value`) values('%s', %d)"
		mysqlproxy:query(string.format(tpl, "role", servId * MAX_ROLE_NUM))
		mysqlproxy:query(string.format(tpl, "union", servId * MAX_ROLE_NUM))
		mysqlproxy:query(string.format(tpl, "trade", servId * MAX_ROLE_NUM * 100))
		mysqlproxy:query(string.format(tpl, "email", 0))
		mysqlproxy:query(string.format(tpl, "emailTimestamp", 0))
		mysqlproxy:query(string.format(tpl, "delay_email", 0))
	end
end

local function initAdvSeasonTable()
	mysqlproxy:query [[
		CREATE TABLE IF NOT EXISTS `adv_season` (
			`key` varchar(45) NOT NULL,
			`value` int(11) DEFAULT NULL,
			PRIMARY KEY (`key`)
			) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
	]]
	local servId = tonumber(skynet.getenv("servId"))
	if servId then
		local tpl = "INSERT INTO `adv_season`(`key`, `value`) values('%s', %d)"

		mysqlproxy:query(string.format(tpl, "idx", 0))
		mysqlproxy:query(string.format(tpl, "chapter", globalCsv.adv_endless_default_chapter))
		mysqlproxy:query(string.format(tpl, "overTime", 0))
	end
end

local function checkRoleTables()
		local role = require("models.Role").new({key = "key"})
		role:checkTableSchema()
end

local steps = {
	[1] = {
		handler = initRedisDb,
		desc = "initialize redis database "
	},
	[2] = {
		handler = initServerDatabase,
		desc = "initialize server database "
	},
	[3] = {
		handler = initAutoIncreUidTable,
		desc = "initialize auto_increment_uid table "
	},
	[4] = {
		handler = initAdvSeasonTable,
		desc = "initialize adv_season table "
	},
	[5] = {
		handler = checkRoleTables,
		desc = "check role tables "
	}
}

skynet.start(function ()
	redisproxy = require("shared.redisproxy")
	--local new = redisproxy:hsetnx("autoincrement_set", "server_start", os.date("%Y%m%d", skynet.timex())) == 1
	--if not new then
	--	print("server has been initialized...")
	--	skynet.exit()
	--	return
	--end
	csvdb = require "shared.csvdata"
	globalCsv = csvdb["GlobalDefineCsv"]

	for _, action in ipairs(steps) do
		print(action.desc .. "start ...")
		action.handler()
		print(action.desc .. "finished ...")
	end
	skynet.exit()
end)