summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--loghelper/init.lua40
-rw-r--r--main.lua79
-rw-r--r--run.bat1
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
diff --git a/main.lua b/main.lua
index 9c78c59..f1cd109 100644
--- a/main.lua
+++ b/main.lua
@@ -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()
diff --git a/run.bat b/run.bat
new file mode 100644
index 0000000..3fb2d74
--- /dev/null
+++ b/run.bat
@@ -0,0 +1 @@
+start "" "D:\Documents\Jin\v0.1.1\jin.exe" "." \ No newline at end of file