314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
1 
 | 
  local skynet = require "skynet"
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
2
3 
 | 
  local queue = require "skynet.queue"
  local bson = require "bson"
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
4 
 | 
  local socketdriver = require "skynet.socketdriver"
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
5
6
7
8
9
10
11
12
13
14
15 
 | 
  
  local serverId = tonumber(skynet.getenv("servId"))
  
  require "shared.init"
  require "skynet.manager"
  
  local table_insert = table.insert
  local pairs = pairs
  local ipairs = ipairs
  local string_format = string.format
  
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
16 
 | 
  local logId = 0
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
17 
 | 
  local CMD, cs = {}
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
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 
 | 
  
  local logHandle = {
  	bi = {
  		host = "127.0.0.1",
  		port = 13001,
  	},
  	log = {
  		host = "127.0.0.1",
  		port = 13002,
  		handle = function(doc)
  			-- 注入字段
  			local now = skynet.timex()
  			doc["time"] = now
  			doc["timestamp"] = now
  			doc["server"] = serverId
  			doc["game_name"] = "wasteland"
  			doc["env"] = "cb"
  			doc["game_name_type"] = "guaji"
  			doc["log_id"] = "wastelandC" .. logId .. "S" .. serverId .. "T" ..  now
  			logId = (logId + 1) % 10000000
  		end
  	},
  }
  
  local connect_relation = {}
  local function getConInfo(fd)
  	return logHandle[connect_relation[fd] or ""]
  end
  
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
47
48
49
50
51
52
53
54
55
56
57
58 
 | 
  
  
  local socket_message = {}
  -- read skynet_socket.h for these macro
  -- SKYNET_SOCKET_TYPE_DATA = 1
  socket_message[1] = function(id, size, data)
  	skynet.error(string.format("LOG SOCKET: data: ", skynet.tostring(data, size)))
  	socketdriver.drop(data, size)
  end
  
  -- SKYNET_SOCKET_TYPE_CONNECT = 2
  socket_message[2] = function(id, _ , addr)
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
59 
 | 
  	local cur = getConInfo(id)
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
60 
 | 
  	skynet.error("LOG SOCKET: connect: ", addr)
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
61
62 
 | 
  	cur.connected = true
  	cur.connecting = false
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
63
64
65
66
67 
 | 
  end
  
  -- SKYNET_SOCKET_TYPE_CLOSE = 3
  socket_message[3] = function(id)
  	skynet.error("LOG SOCKET: closed")
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
68
69
70
71
72 
 | 
  	local cur = getConInfo(id)
  	if not cur then return end
  	cur.connected = false
  	cur.connecting = false
  	connect_relation[id] = nil
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
73
74
75
76
77 
 | 
  end
  
  -- SKYNET_SOCKET_TYPE_ERROR = 5
  socket_message[5] = function(id, _, err)
  	skynet.error("LOG SOCKET: error: ", err)
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
78
79
80
81
82 
 | 
  	local cur = getConInfo(id)
  	if not cur then return end
  	cur.connected = false
  	cur.connecting = false
  	connect_relation[id] = nil
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
83 
 | 
  end
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
84 
 | 
  
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
85
86
87
88
89
90
91
92 
 | 
  
  skynet.register_protocol {
  	name = "socket",
  	id = skynet.PTYPE_SOCKET,	-- PTYPE_SOCKET = 6
  	unpack = socketdriver.unpack,
  	dispatch = function (_, _, t, ...)
  		if socket_message[t] then
  			socket_message[t](...)
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
93
94 
 | 
  		end
  	end
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
95
96 
 | 
  }
  
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 
 | 
  function CMD.log(doc, logTo)
  	logTo = logTo or "log"
  	local cur = logHandle[logTo] 
  	if not cur then
  		print("error log to ", logTo)
  	end
  	if cur.handle then
  		cur.handle(doc)
  	end
  	if cur.connected and cur.fd then
  		socketdriver.send(cur.fd, json.encode(doc) .. "\n")
  	else
  		-- 断线会丢失一部分日志
  		if not cur.connecting then
  			CMD.open() -- 连一下
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
112
113 
 | 
  		end
  	end
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
114
115 
 | 
  end
  
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
116 
 | 
  function CMD.open()
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
117
118
119
120
121
122
123 
 | 
  	for logTo, data in pairs(logHandle) do
  		if not data.connecting  and not data.connected then
  			data.connecting = true
  			data.fd = socketdriver.connect(data.host, data.port)
  			connect_relation[data.fd] = logTo
  		end
  	end
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
124
125 
 | 
  end
  
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
126 
 | 
  local function __init__()
 
 | 
df883a11
 
  zhouhaihai
 
日志处理
 | 
127 
 | 
  	skynet.dispatch("lua", function (session, address, command, ...)
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
128
129
130
131 
 | 
  		local f = CMD[command]
  		if command == "open" then
  			skynet.ret(skynet.pack(f(...)))
  		else
 
 | 
f22a33af
 
  zhouhaihai
 
自己的日志
 | 
132
133 
 | 
  			local doc, logTo = ...
  			cs(function() f(doc, logTo) end)
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
134
135
136
137 
 | 
  		end
  	end)
  	cs = queue()
  
 
 | 
a5486ede
 
  zhouhaihai
 
csvdata 修改为 share...
 | 
138 
 | 
  	skynet.register(".log")
 
 | 
314bc5df
 
  zhengshouren
 
提交服务器初始代码
 | 
139
140
141 
 | 
  end
  
  skynet.start(__init__)
 
 |