Blame view

src/services/httpweb.lua 2.45 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
  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"
222a7d5f   zhouhaihai   httpGm
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  
  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
30
31
32
33
  
  local table = table
  local string = string
  
c7ecb87f   zhouhaihai   添加 测试账号 方法
34
35
36
37
38
39
40
  skynet.register_protocol {
  	name = "role",
  	id = 13,
  	pack = skynet.pack,
  	unpack = skynet.unpack,
  }
  
5e5d7680   zhouhaihai   热更新 优化
41
  local port = ...
3fe4471e   zhouhaihai   热更新 demo
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  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()
875e5071   zhouhaihai   服务名称修改
57
  	redisd = skynet.localname(".REDIS")
222a7d5f   zhouhaihai   httpGm
58
59
  	csvdb = sharedata.query("csvdata")
  	
3fe4471e   zhouhaihai   热更新 demo
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
  	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__)