Blame view

src/services/watchdog.lua 3.5 KB
314bc5df   zhengshouren   提交服务器初始代码
1
  local skynet = require "skynet"
3fe4471e   zhouhaihai   热更新 demo
2
  require "skynet.manager"
314bc5df   zhengshouren   提交服务器初始代码
3
4
5
6
7
8
9
10
  local redisproxy = require "shared.redisproxy"
  local socket = require "skynet.socket"
  local netpack = require "skynet.netpack"
  local datacenter = require "skynet.datacenter"
  local snax = require "skynet.snax"
  local agent_ctrl = require "services.agent_ctrl"
  local xxtea = require "xxtea"
  local mc = require "skynet.multicast"
875e5071   zhouhaihai   服务名称修改
11
  local cluster = require "skynet.cluster"
a5486ede   zhouhaihai   csvdata 修改为 share...
12
  local csvdata = require "shared.csvdata"
314bc5df   zhengshouren   提交服务器初始代码
13
14
15
16
17
18
19
  
  require "ProtocolCode"
  require "GlobalVar"
  require "shared.init"
  require "utils.init"
  
  local CMD, SOCKET = {}, {}
875e5071   zhouhaihai   服务名称修改
20
  local globald, pvpd
314bc5df   zhengshouren   提交服务器初始代码
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  
  local pool_size = tonumber(...)
  
  function SOCKET.open(fd, addr)
  	skynet.call(gate_serv, "lua", "accept" , fd)
  	agent_ctrl:socket_open(fd, addr)
  end
  
  function SOCKET.close(fd)
  	print("socket close", fd)
  	agent_ctrl:socket_close(fd)
  end
  
  function SOCKET.error(fd, msg)
  	print("socket error",fd, msg)
  	agent_ctrl:socket_error(fd)
  end
  
  function SOCKET.data(fd, msg)
759669cc   zhouhaihai   报错
40
  	if #msg < 2 then return end
314bc5df   zhengshouren   提交服务器初始代码
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  	local cmd = string.unpack("H", string.sub(msg, 1, 2))
  	if cmd == actionCodes.Role_queryLoginRpc then
  		local data = MsgPack.unpack(xxtea.decrypt(string.sub(msg, 3), XXTEA_KEY))
  		-- TODO: 先检测uid的合法性
  		if not data or not data.uid then return end
  		agent_ctrl:query_agent(fd, data.uid)
   	end
  end
  
  local use_logd = tonumber(skynet.getenv "logd")
  
  -- @desc: agent状态定时检测
  function check_agent_status()
  	pcall(agent_ctrl.check_agent_status, agent_ctrl)
3c0ea5fb   zhouhaihai   抽英雄
55
  	skynet.timeout(100, check_agent_status)
314bc5df   zhengshouren   提交服务器初始代码
56
57
58
59
60
61
62
63
64
65
66
67
68
  end
  
  -- 创建world以及union channel 用于广播
  function create_mutilcast()
  	for i = 1, 10 do
  		local chan_w = mc:new()
  		datacenter.set("MC_W_CHANNEL" .. i, chan_w.channel)
  	end
  end
  
  function CMD.start(conf)
  	skynet.call(gate_serv, "lua", "open" , conf)
  	skynet.call(redisd, "lua", "open", conf)
5e6af9d6   zhouhaihai   排队功能
69
  	skynet.call(queued_serv, "lua", "open", gate_serv)
314bc5df   zhengshouren   提交服务器初始代码
70
71
  
  	if use_logd == 1 then
c763e563   zhouhaihai   删除NGX
72
  		skynet.call(logd, "lua", "open")
314bc5df   zhengshouren   提交服务器初始代码
73
  	end
e3c5cc5e   zhouhaihai   跨服竞技场over
74
  	skynet.call(pvpd, "lua", "start")
314bc5df   zhengshouren   提交服务器初始代码
75
76
77
78
79
  	-- 开启agent状态检测定时器
  	check_agent_status()
  	-- 创建广播服务
  	create_mutilcast()
  
3fe4471e   zhouhaihai   热更新 demo
80
  	skynet.call(conf.httpd, "lua", "start")
314bc5df   zhengshouren   提交服务器初始代码
81
82
83
84
  
  	-- roomServer = skynet.newservice("services/roomServer")
  	-- skynet.call(roomServer, "lua", "start")
  
875e5071   zhouhaihai   服务名称修改
85
86
  	skynet.newservice("services/dbseed")
  
314bc5df   zhengshouren   提交服务器初始代码
87
88
89
  	globald = skynet.newservice("services/globald")
  	skynet.call(globald, "lua", "start")
  
875e5071   zhouhaihai   服务名称修改
90
91
  	local servId = tonumber(skynet.getenv("servId"))
  	cluster.open("server" .. servId)
314bc5df   zhengshouren   提交服务器初始代码
92
93
94
95
96
97
  end
  
  function CMD.forceClose(fd)
  	agent_ctrl:exit_agent(fd)
  end
  
3fe4471e   zhouhaihai   热更新 demo
98
99
100
101
  function CMD.hotfix(code)
  	agent_ctrl:hotfix(code)
  end
  
314bc5df   zhengshouren   提交服务器初始代码
102
103
104
105
106
107
108
109
110
111
112
  skynet.start(function()
  	skynet.dispatch("lua", function(session, source, cmd, subcmd, ...)
  		if cmd == "socket" then
  			local f = SOCKET[subcmd]
  			f(...)
  			-- socket api don't need return
  		else
  			local f = assert(CMD[cmd])
  			skynet.ret(skynet.pack(f(subcmd, ...)))
  		end
  	end)
a5486ede   zhouhaihai   csvdata 修改为 share...
113
  	skynet.register ".watchdog"
314bc5df   zhengshouren   提交服务器初始代码
114
115
116
  	-- 数据库服务
  	redisd = skynet.newservice("services/redisd")
  
a5486ede   zhouhaihai   csvdata 修改为 share...
117
118
  	-- 提前加载好
  	csvdata.init()
314bc5df   zhengshouren   提交服务器初始代码
119
120
121
122
123
124
  	print("launch csvdatad ...")
  
  	-- 日志服务
  	if use_logd == 1 then
  		logd = skynet.newservice("services/logd")
  	end
e3c5cc5e   zhouhaihai   跨服竞技场over
125
126
127
  	-- pvp 服务
  	pvpd = skynet.newservice("services/pvpd")
  	cluster.register("pvpd", pvpd)
314bc5df   zhengshouren   提交服务器初始代码
128
129
130
131
132
133
134
135
136
137
138
139
140
  	
  	local poold = skynet.newservice("services/poold")
  	local obj = skynet.call(poold, "lua", "start", pool_size)
  
  	agent_ctrl:init(obj, poold)
  
  	print(string.format("launch %d agent at the beginning", pool_size))
  
  	-- 全局工具函数
  	skynet.newservice("services/named")
  	skynet.newservice("services/chated")
  	-- 网关服务
  	gate_serv = skynet.newservice("gate")
5e6af9d6   zhouhaihai   排队功能
141
  	queued_serv = skynet.newservice("services/queued")
314bc5df   zhengshouren   提交服务器初始代码
142
  end)