diff options
Diffstat (limited to 'jnet')
-rw-r--r-- | jnet/README.md | 57 | ||||
-rw-r--r-- | jnet/example/client.lua | 0 | ||||
-rw-r--r-- | jnet/example/messages.lua | 34 | ||||
-rw-r--r-- | jnet/example/server.lua | 0 | ||||
-rw-r--r-- | jnet/init.lua | 51 |
5 files changed, 142 insertions, 0 deletions
diff --git a/jnet/README.md b/jnet/README.md new file mode 100644 index 0000000..28e53dd --- /dev/null +++ b/jnet/README.md @@ -0,0 +1,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 +]]
\ No newline at end of file diff --git a/jnet/example/client.lua b/jnet/example/client.lua new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/jnet/example/client.lua diff --git a/jnet/example/messages.lua b/jnet/example/messages.lua new file mode 100644 index 0000000..9d4c523 --- /dev/null +++ b/jnet/example/messages.lua @@ -0,0 +1,34 @@ +local jnet = require "jnet" + +local msg = {} + +local INT = jnet.DataType.INT +local FLOAT = jnet.DataType.FLOAT +local BOOL = jnet.DataType.BOOL +local STRING = jnet.DataType.STRING + +msg.Skill = { + id = INT, + damage = FLOAT, + name = STRING, + description = STRING, + -- bonus = { + -- damage = FLOAT, + -- range = FLOAT, + -- cd = BOOL + -- } + cd = BOOL +} + +msg.Move = { + id = INT, + x = FLOAT, + y = FLOAT, +} + +msg.Chat = { + id = INT, + content = STRING +} + +return msg
\ No newline at end of file diff --git a/jnet/example/server.lua b/jnet/example/server.lua new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/jnet/example/server.lua diff --git a/jnet/init.lua b/jnet/init.lua new file mode 100644 index 0000000..76a023f --- /dev/null +++ b/jnet/init.lua @@ -0,0 +1,51 @@ +local jnet = {} + +jnet.DataType = { + INT = 1, + FLOAT = 2, + BOOL = 3, + STRING = 4 +} + +local INT = jnet.DataType.INT +local FLOAT = jnet.DataType.FLOAT +local BOOL = jnet.DataType.BOOL +local STRING = jnet.DataType.STRING + +local grab = function(buffer, t, sp) + if t == INT then + return buffer:grabInteger(sp) + elseif t == FLOAT then + return buffer:grabFloat(sp) + elseif t == BOOL then + return buffer:grabBoolean(sp) + elseif t == STRING then + return buffer:grabString(sp) + end +end + +-- return jin.net.Buffer +jnet.serialize = function(message, buffer) + if buffer == nil then + return + end + for k, v in pairs(message) do + buffer:append(v) + end + return buffer +end + +-- input jin.net.Buffer, startpoint +-- return messege table +jnet.deserialize = function(msg_type, buffer, startpoint) + local message = {} + local p = startpoint or 0 + for k, t in pairs(msg_type) do + local v, l = grab(buffer, t, p) + p = l + p + message[k] = v + end + return message +end + +return jnet
\ No newline at end of file |