diff options
-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 | ||||
-rw-r--r-- | loghelper/init.lua | 40 | ||||
-rw-r--r-- | main.lua | 79 | ||||
-rw-r--r-- | run.bat | 1 |
8 files changed, 224 insertions, 38 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 diff --git a/loghelper/init.lua b/loghelper/init.lua index fc07943..b227795 100644 --- a/loghelper/init.lua +++ b/loghelper/init.lua @@ -1,9 +1,9 @@ -- 不能使用 debug 命名模块,会冲突, -- 要使用其余名字比如 loghelper -local loghelper = {} +local log = {} io.stdout:setvbuf("no") -loghelper.LEVEL = { +log.LEVEL = { INFO = 4, DEBUG = 3, WARN = 2, @@ -12,22 +12,38 @@ loghelper.LEVEL = { } local logTag = { - [loghelper.LEVEL.INFO] = "[Info]", - [loghelper.LEVEL.DEBUG] = "[Debug]", - [loghelper.LEVEL.WARN] = "[Warn]", - [loghelper.LEVEL.ERROR] = "[Error]", + [log.LEVEL.INFO] = "[Info]", + [log.LEVEL.DEBUG] = "[Debug]", + [log.LEVEL.WARN] = "[Warn]", + [log.LEVEL.ERROR] = "[Error]", } -loghelper.level = loghelper.LEVEL.INFO +log.level = log.LEVEL.INFO -loghelper.strict = function(level) - loghelper.level = level +log.strict = function(level) + log.level = level end -loghelper.log = function(level, msg) - if level <= loghelper.level then +log.log = function(level, msg) + if level <= log.level then print(logTag[level] .. ":" .. msg) end end -return loghelper
\ No newline at end of file +log.info = function(msg) + log.log(log.LEVEL.INFO, msg) +end + +log.debug = function(msg) + log.log(log.LEVEL.DEBUG, msg) +end + +log.warn = function(msg) + log.log(log.LEVEL.WARN, msg) +end + +log.error = function(msg) + log.log(log.LEVEL.ERROR, msg) +end + +return log
\ No newline at end of file @@ -1,49 +1,78 @@ -require("global") -local loghelper = require("loghelper") -loghelper.strict(loghelper.LEVEL.INFO) +_require = require +require = function(name) + return _require("jin-modules." .. name) +end +local jnet = require("jnet") +local log = require("loghelper") +log.strict(log.LEVEL.INFO) local EventMsgCenter = require("EventMsgCenter.EventMsgCenter") local Events = require("EventMsgCenter.Events") local timer = require("timer.timer") -local channels = require("channels") _G["frame"] = 0 local thread = nil - +local socket = nil jin.core.onLoad = function() - thread = jin.thread.Thread("Test", [[ -require("global") -local channels = require("channels") +---- 网络测试 + jin.net.init() + socket = jin.net.Socket("TCP", 8807) + local Skill = { + id = jnet.DataType.INT, + damage = jnet.DataType.FLOAT, + name = jnet.DataType.STRING, + description = jnet.DataType.STRING, + -- bonus = { + -- damage = FLOAT, + -- range = FLOAT, + -- cd = BOOL + -- } + cd = jnet.DataType.BOOL + } + local buf = jin.net.Buffer(0) + local mySkill = { + id = 12, + name = "Hell fire!!!", + damage = 3.4, + description = "1234", + -- bonus = { + -- damage = FLOAT, + -- range = FLOAT, + -- cd = BOOL + -- } + cd = true + } + jnet.serialize(mySkill, buf) + local msg = jnet.deserialize(Skill, buf, 0) + print(msg.name) -local t = jin.thread.getThread() -local str = t:demand(channels.PROGRESS) -print(str) -t:send(3, "back data") -while true do - jin.time.sleep(1) -end - ]] ) + thread = jin.thread.Thread("Test", [[ + local thread = jin.thread.getThread() + local socket = thread:demand(1) + while true do + local client = socket:accept() + local buf = client:receive() + local str = buf:grabString(0) + print(str) + end + ]]) thread:start() + thread:send(1, socket) EventMsgCenter.registerMsg(Events.Player_Move, function(msg) print(msg) end) timer.every(1.0, function() - loghelper.log(loghelper.LEVEL.INFO, _G["frame"] .. "fps") - EventMsgCenter.sendMsg(Events.Player_Move, _G["frame"]) + log.info(_G["frame"] .. "fps") + -- EventMsgCenter.sendMsg(Events.Player_Move, _G["frame"]) _G["frame"] = 0 - if thread:receive(3) then - print(thread:fetch(3)) - end end) timer.after(4.0, function() - thread:send(channels.PROGRESS, "test thread data") EventMsgCenter.unregisterAllMsgByEvent(Events.Player_Move) end) end jin.core.onEvent = function(e) if e.type == "quit" then - jin.core.stop() - elseif e.type == "keydown" then + jin.core.stop() elseif e.type == "keydown" then if e.key == "Escape" then jin.core.stop() end @@ -53,8 +82,6 @@ end jin.core.onUpdate = function(dt) _G["frame"] = _G["frame"] + 1 timer.update(dt) - - -- loghelper.log(loghelper.LEVEL.WARN, "版本" .. jin.revision()) end jin.core.onDraw = function() @@ -0,0 +1 @@ +start "" "D:\Documents\Jin\v0.1.1\jin.exe" "."
\ No newline at end of file |