summaryrefslogtreecommitdiff
path: root/xmake/modules
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-10 17:33:46 +0800
committerruki <[email protected]>2022-04-10 17:33:46 +0800
commit6e13e6589fad24bdd4703c15332178cfaac3b65e (patch)
tree87127e209b64a430bc45aa12de1f09bc21d38e69 /xmake/modules
parentfd58f4c2842b2b484b4807d7b16e0ee569926a88 (diff)
add ping message
Diffstat (limited to 'xmake/modules')
-rw-r--r--xmake/modules/private/service/connect_service.lua10
-rw-r--r--xmake/modules/private/service/message.lua72
-rw-r--r--xmake/modules/private/service/server/remote_build_server.lua20
-rw-r--r--xmake/modules/private/service/server/server.lua5
-rw-r--r--xmake/modules/private/service/stream.lua14
5 files changed, 111 insertions, 10 deletions
diff --git a/xmake/modules/private/service/connect_service.lua b/xmake/modules/private/service/connect_service.lua
index dc98622f7..eabcdfc32 100644
--- a/xmake/modules/private/service/connect_service.lua
+++ b/xmake/modules/private/service/connect_service.lua
@@ -24,6 +24,7 @@ import("core.base.socket")
import("core.base.scheduler")
import("private.service.config")
import("private.service.stream")
+import("private.service.message")
import("private.service.client.remote_build_client")
function _get_address()
@@ -48,9 +49,12 @@ function _connect(addr, port)
print("%s: connect %s:%d ..", client, addr, port)
if sock then
print("%s: connected!", client)
- local wstream = stream(sock)
- if wstream:send_object({name = "msg", body = "hello xmake!", func = function () print("hello!") end}) and wstream:flush() then
- print("send ok")
+ local sock_stream = stream(sock)
+ if sock_stream:send_msg(message.new_ping()) and sock_stream:flush() then
+ local msg = sock_stream:recv_msg()
+ if msg then
+ msg:dump()
+ end
end
io.save(statusfile, {addr = addr, port = port})
else
diff --git a/xmake/modules/private/service/message.lua b/xmake/modules/private/service/message.lua
new file mode 100644
index 000000000..a6af6fceb
--- /dev/null
+++ b/xmake/modules/private/service/message.lua
@@ -0,0 +1,72 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- Copyright (C) 2015-present, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file message.lua
+--
+
+-- imports
+import("core.base.object")
+
+-- define module
+local message = message or object()
+
+-- the message code
+message.CODE_PING = 1
+
+-- init message
+function message:init(body)
+ self._BODY = body
+end
+
+-- get message code
+function message:code()
+ return self:body().code
+end
+
+-- is ping message?
+function message:is_ping()
+ return self:code() == message.CODE_PING
+end
+
+-- get message body
+function message:body()
+ return self._BODY
+end
+
+-- dump message
+function message:dump()
+ print(self:body())
+end
+
+-- new message
+function _new(body)
+ local instance = message()
+ instance:init(body)
+ return instance
+end
+
+-- new ping message
+function new_ping()
+ return _new({
+ code = message.CODE_PING,
+ xmakever = xmake.version():shortstr()
+ })
+end
+
+function main(body)
+ return _new(body)
+end
diff --git a/xmake/modules/private/service/server/remote_build_server.lua b/xmake/modules/private/service/server/remote_build_server.lua
index 3f934306e..57f697f59 100644
--- a/xmake/modules/private/service/server/remote_build_server.lua
+++ b/xmake/modules/private/service/server/remote_build_server.lua
@@ -20,6 +20,8 @@
-- imports
import("private.service.config")
+import("private.service.stream")
+import("private.service.message")
import("private.service.server.server")
-- define module
@@ -34,12 +36,22 @@ function remote_build_server:init(daemon)
end
local listen = assert(config.get("remote_build.server.listen"), "config(remote_build.server.listen): not found!")
super.listen_set(self, listen)
- super.handler_set(self, self.handler)
+ super.handler_set(self, self.on_handle)
end
--- the server handler
-function remote_build_server:handler(msg)
- print("on handler")
+-- handle ping message
+function remote_build_server:handle_ping(sock, msg)
+ local wstream = stream(sock)
+ if wstream:send_msg(message.new_ping()) and wstream:flush() then
+ print("send ok")
+ end
+end
+
+-- on handle message
+function remote_build_server:on_handle(sock, msg)
+ if msg:is_ping() then
+ self:handle_ping(sock, msg)
+ end
end
-- get class
diff --git a/xmake/modules/private/service/server/server.lua b/xmake/modules/private/service/server/server.lua
index 721af504d..d3035eddf 100644
--- a/xmake/modules/private/service/server/server.lua
+++ b/xmake/modules/private/service/server/server.lua
@@ -24,6 +24,7 @@ import("core.base.bytes")
import("core.base.socket")
import("core.base.scheduler")
import("private.service.stream")
+import("private.service.message")
-- define module
local server = server or object()
@@ -124,9 +125,7 @@ function server:_handle_session(sock)
while true do
local msg = rstream:recv_object()
if msg then
- -- TODO
- print(msg)
- msg.func()
+ self:_HANDLER(sock, message(msg))
else
break
end
diff --git a/xmake/modules/private/service/stream.lua b/xmake/modules/private/service/stream.lua
index dd4ff2aec..d7000090e 100644
--- a/xmake/modules/private/service/stream.lua
+++ b/xmake/modules/private/service/stream.lua
@@ -22,6 +22,7 @@
import("core.base.object")
import("core.base.socket")
import("core.base.bytes")
+import("private.service.message")
-- define module
local stream = stream or object()
@@ -89,6 +90,11 @@ function stream:send(data, start, last)
end
end
+-- send message
+function stream:send_msg(msg)
+ return self:send_object(msg:body())
+end
+
-- send object
function stream:send_object(obj)
local str, errors = string.serialize(obj, {strip = true, indent = false})
@@ -177,6 +183,14 @@ function stream:recv_u16be()
end
end
+-- recv message
+function stream:recv_msg()
+ local body = self:recv_object()
+ if body then
+ return message(body)
+ end
+end
+
-- recv object
function stream:recv_object()
local str = self:recv_string()