diff options
| author | ruki <[email protected]> | 2022-04-12 21:01:54 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-04-12 21:01:54 +0800 |
| commit | df2fe3cae563c89ecd3789d82c4b43c6e0c77096 (patch) | |
| tree | 73e069aa2c2dab79ccfcdf70c055ad7b6aeb48dd | |
| parent | 449eb2068480bf8c8e253d5b2a13493a0f40f5cb (diff) | |
improve session
| -rw-r--r-- | xmake/modules/private/service/remote_build/server.lua | 75 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/session.lua | 4 |
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") |
