summaryrefslogtreecommitdiff
path: root/jnet
diff options
context:
space:
mode:
Diffstat (limited to 'jnet')
-rw-r--r--jnet/README.md57
-rw-r--r--jnet/example/client.lua0
-rw-r--r--jnet/example/messages.lua34
-rw-r--r--jnet/example/server.lua0
-rw-r--r--jnet/init.lua51
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