summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-12 21:01:54 +0800
committerruki <[email protected]>2022-04-12 21:01:54 +0800
commitdf2fe3cae563c89ecd3789d82c4b43c6e0c77096 (patch)
tree73e069aa2c2dab79ccfcdf70c055ad7b6aeb48dd
parent449eb2068480bf8c8e253d5b2a13493a0f40f5cb (diff)
improve session
-rw-r--r--xmake/modules/private/service/remote_build/server.lua75
-rw-r--r--xmake/modules/private/service/remote_build/session.lua4
2 files changed, 41 insertions, 38 deletions
diff --git a/xmake/modules/private/service/remote_build/server.lua b/xmake/modules/private/service/remote_build/server.lua
index 0e4cf0a73..279ee62c9 100644
--- a/xmake/modules/private/service/remote_build/server.lua
+++ b/xmake/modules/private/service/remote_build/server.lua
@@ -67,26 +67,21 @@ function remote_build_server:_check_requires()
-- TODO
end
--- handle connect message
-function remote_build_server:_handle_connect(stream, msg)
+-- on handle message
+function remote_build_server:_on_handle(stream, msg)
local session_id = msg:session_id()
- local session_ok, session_errs = self:_session_open(session_id)
- local respmsg = msg:clone()
- respmsg:body().xmakever = xmake.version():shortstr()
- respmsg:status_set(ok)
- if not session_ok and session_errs then
- respmsg:errors_set(session_errs)
+ vprint("%s: %s: <session %s>: on handle message(%d)", self, stream:sock(), session_id, msg:code())
+ vprint(msg:body())
+ local session_ok, session_errs
+ if msg:is_connect() then
+ session_ok, session_errs = self:_session_open(session_id)
+ elseif msg:is_disconnect() then
+ session_ok, session_errs = self:_session_close(session_id)
+ elseif msg:is_sync() then
+ session_ok, session_errs = self:_session_syncfiles(session_id)
end
- local ok = stream:send_msg(respmsg) and stream:flush()
- vprint("%s: %s: <session %s>: send %s", self, stream:sock(), session_id, ok and "ok" or "failed")
-end
-
--- handle disconnect message
-function remote_build_server:_handle_disconnect(stream, msg)
- local session_id = msg:session_id()
- local session_ok, session_errs = self:_session_close(session_id)
local respmsg = msg:clone()
- respmsg:status_set(ok)
+ respmsg:status_set(session_ok)
if not session_ok and session_errs then
respmsg:errors_set(session_errs)
end
@@ -94,27 +89,6 @@ function remote_build_server:_handle_disconnect(stream, msg)
vprint("%s: %s: <session %s>: send %s", self, stream:sock(), session_id, ok and "ok" or "failed")
end
--- handle sync message
-function remote_build_server:_handle_sync(stream, msg)
- local session_id = msg:session_id()
- local respmsg = msg:clone()
- local ok = stream:send_msg(respmsg) and stream:flush()
- vprint("%s: %s: <session %s>: send %s", self, stream:sock(), session_id, ok and "ok" or "failed")
-end
-
--- on handle message
-function remote_build_server:_on_handle(stream, msg)
- vprint("%s: %s: <session %s>: on handle message(%d)", self, stream:sock(), msg:session_id(), msg:code())
- vprint(msg:body())
- if msg:is_connect() then
- self:_handle_connect(stream, msg)
- elseif msg:is_disconnect() then
- self:_handle_disconnect(stream, msg)
- elseif msg:is_sync() then
- self:_handle_sync(stream, msg)
- end
-end
-
-- get session
function remote_build_server:_session(session_id)
return self._SESSIONS[session_id]
@@ -168,6 +142,31 @@ function remote_build_server:_session_close(session_id)
return ok, errors
end
+-- sync files
+function remote_build_server:_session_syncfiles(session_id)
+ local session = self:_session(session_id)
+ local errors
+ local ok = try
+ {
+ function ()
+ if session then
+ session:syncfiles()
+ end
+ return true
+ end,
+ catch
+ {
+ function (errs)
+ errors = tostring(errs)
+ end
+ }
+ }
+ if ok then
+ self._SESSIONS[session_id] = nil
+ end
+ return ok, errors
+end
+
function remote_build_server:__tostring()
return "<remote_build_server>"
end
diff --git a/xmake/modules/private/service/remote_build/session.lua b/xmake/modules/private/service/remote_build/session.lua
index 1c6bfafc7..e8001adf7 100644
--- a/xmake/modules/private/service/remote_build/session.lua
+++ b/xmake/modules/private/service/remote_build/session.lua
@@ -50,6 +50,10 @@ function session:close()
end
end
+-- syncfiles
+function session:syncfiles()
+end
+
-- get work directory
function session:workdir()
local workdir = config.get("remote_build.server.workdir")