Blame view

src/services/httpweb.lua 2.49 KB
222a7d5f   zhouhaihai   httpGm
1
  
3fe4471e   zhouhaihai   热更新 demo
2
3
4
  local urllib = require "http.url"
  require "shared.init"
  require "utils.init"
222a7d5f   zhouhaihai   httpGm
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
  local sockethelper = require "http.sockethelper"
  local httpd = require "http.httpd"
  skynet = require "skynet"
  redisproxy = require "shared.redisproxy"
  netpack = require "skynet.netpack"
  datacenter = require "skynet.datacenter"
  sharedata = require "skynet.sharedata"
  mcast_util = require "services/mcast_util"
  globalCsv = require "csvdata/GlobalDefine"
  
  local socket = require "skynet.socket"
  local harbor = require "skynet.harbor"
  
  require "shared.init"
  require "utils.init"
  require "ProtocolCode"
  require "skynet.manager"
  require "RedisKeys"
  require "GlobalVar"
  
  SendPacket = function(...) end
  rpcAgent = function(...) end
  rpcParter = function(...) end
  rpcRole = function(...) end
  rpcUnion = function(...) end
  rpcOtherUnion = function(...) end
3fe4471e   zhouhaihai   热更新 demo
31
32
33
34
  
  local table = table
  local string = string
  
c7ecb87f   zhouhaihai   添加 测试账号 方法
35
36
37
38
39
40
41
  skynet.register_protocol {
  	name = "role",
  	id = 13,
  	pack = skynet.pack,
  	unpack = skynet.unpack,
  }
  
5e5d7680   zhouhaihai   热更新 优化
42
  local port = ...
3fe4471e   zhouhaihai   热更新 demo
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  port = tonumber(port)
  
  local key = "zhaolu1234dangge"
  local function response(id, ...)
  	local ok, err = httpd.write_response(sockethelper.writefunc(id), ...)
  	if not ok then
  		-- if err == sockethelper.socket_error , that means socket closed.
  		skynet.error(string.format("fd = %d, %s", id, err))
  	end
  end
  
  
  local CMD = require "actions.HttpAction"
  
  local function start()
222a7d5f   zhouhaihai   httpGm
58
59
60
  	redisd = harbor.queryname("REDIS")
  	csvdb = sharedata.query("csvdata")
  	
3fe4471e   zhouhaihai   热更新 demo
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
  	local listen_socket = socket.listen("0.0.0.0", port)
  	print("Listen web port " .. port)
  	socket.start(listen_socket , function(id, addr)
  		socket.start(id)
  		local code, url, method, header, body = httpd.read_request(sockethelper.readfunc(id), 8192)
  		if code then
  			if code ~= 200 then
  				response(id, code)
  			else
  				local path, query = urllib.parse(url)
  				local cmd = path:match("([^/]+)")
  				if not CMD[cmd] or not query then
  					response(id, 404)
  					socket.close(id) 
  					return 
  				end
  				local query = urllib.parse_query(query)
  				if query.key ~= key then
  					response(id, 404)
  					socket.close(id) 
  					return 
  				end
  				local content = CMD[cmd](query, body)
  				if not content then
  					code = 404
  				end
  				response(id, code, content)
  			end
  		else
  			if url == sockethelper.socket_error then
  				skynet.error("socket closed")
  			else
  				skynet.error(url)
  			end
  		end
  		socket.close(id)
  	end)
  end
  
  local function __init__()
  	skynet.dispatch("lua", function(_,_, command, ...)
  		if command == "start" then
  			skynet.ret(skynet.pack(start(...)))
  		end
  	end)
  end
  
  skynet.start(__init__)