dbseed.lua
4.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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)