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
|
socket通信的数据类型
* INT 32
* FLOAT 32
* BOOL 32
* STRING --
STRING判定右界,以0结尾即可
一个协议定义的例子(最好把协议统一放在一个单独的lua文件里)
-- s2c_package.lua
local INT = jin.net.dataType.INT
local FLOAT = jin.net.dataType.FLOAT
local BOOL = jin.net.dataType.BOOL
local STRING = jin.net.dataType.STRING
Skill = {
id = INT,
damage = FLOAT,
range = FLOAT,
description = STRING
}
发的时候
local data, size = jin.net.serialize(Message.Skill, message)
Socket:send(data, size)
收的时候
local data, size = Socket:receive()
local message = jin.net.deserialize(Message.Skill, data, size)
jin.net.dataType = {
INT = 1,
FLOAT = 2,
BOOL = 3,
STRING = 4
}
jin.net.deserialize = function(prototype, data, size)
local message = {}
local i = 1
for k, t in pairs(prototype) do
message[k] = data[i]
i = i + 1
end
return message
end
jin.net.serialize = function(prototype, message)
local data = ""
local size = 0
for i, v in pairs(message) do
data, size = jin.bit.write(data, size, v)
end
return data, size
end
-- 解密协议
jin.net.decode = function()
local s = jin.bit.grabstring(buffer, size)
end
]]
|