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)