diff options
| author | ruki <[email protected]> | 2022-04-12 22:41:15 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-04-12 22:41:15 +0800 |
| commit | 1ef23a02096321059a14afd8b6bc38eeb3b3d282 (patch) | |
| tree | 8bb1c46f0ebbad9858d4fa659d69035f639575a8 | |
| parent | 8f1db2b9b2df2b7223fb2878a1dc7d8cf7b1adfd (diff) | |
clean files in server
| -rw-r--r-- | xmake/modules/private/service/clean_files.lua | 30 | ||||
| -rw-r--r-- | xmake/modules/private/service/disconnect_service.lua | 2 | ||||
| -rw-r--r-- | xmake/modules/private/service/message.lua | 14 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/client.lua | 30 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/server.lua | 107 | ||||
| -rw-r--r-- | xmake/modules/private/service/remote_build/session.lua | 15 | ||||
| -rw-r--r-- | xmake/plugins/service/main.lua | 3 | ||||
| -rw-r--r-- | xmake/plugins/service/xmake.lua | 7 |
8 files changed, 125 insertions, 83 deletions
diff --git a/xmake/modules/private/service/clean_files.lua b/xmake/modules/private/service/clean_files.lua new file mode 100644 index 000000000..ecd826b38 --- /dev/null +++ b/xmake/modules/private/service/clean_files.lua @@ -0,0 +1,30 @@ +--!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 clean_service.lua +-- + +-- imports +import("core.base.option") +import("private.service.config") +import("private.service.remote_build.client", {alias = "remote_build_client"}) + +function main() + remote_build_client():clean() +end + + diff --git a/xmake/modules/private/service/disconnect_service.lua b/xmake/modules/private/service/disconnect_service.lua index 84739bcee..a1f9e625d 100644 --- a/xmake/modules/private/service/disconnect_service.lua +++ b/xmake/modules/private/service/disconnect_service.lua @@ -20,8 +20,6 @@ -- imports import("core.base.option") -import("core.base.socket") -import("core.base.scheduler") import("private.service.config") import("private.service.remote_build.client", {alias = "remote_build_client"}) diff --git a/xmake/modules/private/service/message.lua b/xmake/modules/private/service/message.lua index 5f7cd8968..748c1d5a7 100644 --- a/xmake/modules/private/service/message.lua +++ b/xmake/modules/private/service/message.lua @@ -28,6 +28,7 @@ local message = message or object() message.CODE_CONNECT = 1 message.CODE_DISCONNECT = 2 message.CODE_SYNC = 3 +message.CODE_CLEAN = 4 -- init message function message:init(body) @@ -59,6 +60,11 @@ function message:is_sync() return self:code() == message.CODE_SYNC end +-- is clean message? +function message:is_clean() + return self:code() == message.CODE_CLEAN +end + -- is success? function message:success() return self:body().status == true @@ -127,6 +133,14 @@ function new_sync(session_id) }) end +-- new clean message +function new_clean(session_id) + return _new({ + code = message.CODE_CLEAN, + session_id = session_id + }) +end + function main(body) return _new(body) end diff --git a/xmake/modules/private/service/remote_build/client.lua b/xmake/modules/private/service/remote_build/client.lua index c50282979..56cce3d3f 100644 --- a/xmake/modules/private/service/remote_build/client.lua +++ b/xmake/modules/private/service/remote_build/client.lua @@ -135,6 +135,36 @@ function remote_build_client:disconnect() self:status_save() end +-- clean server files +function remote_build_client:clean() + assert(self:is_connected(), "%s: has been not connected!", self) + local addr = self:addr() + local port = self:port() + local sock = socket.connect(addr, port) + local session_id = self:session_id() + local cleaned = false + print("%s: clean files in %s:%d ..", self, addr, port) + if sock then + local stream = socket_stream(sock) + if stream:send_msg(message.new_clean(session_id)) and stream:flush() then + local msg = stream:recv_msg() + if msg then + vprint(msg:body()) + if msg:success() then + cleaned = true + else + print("%s: clean files in %s:%d failed, %s", self, addr, port, msg:errors()) + end + end + end + end + if cleaned then + print("%s: cleaned!", self) + else + print("%s: clean files in %s:%d failed", self, addr, port) + end +end + -- is connected? function remote_build_client:is_connected() return self:status().connected diff --git a/xmake/modules/private/service/remote_build/server.lua b/xmake/modules/private/service/remote_build/server.lua index 279ee62c9..4dec9573a 100644 --- a/xmake/modules/private/service/remote_build/server.lua +++ b/xmake/modules/private/service/remote_build/server.lua @@ -70,16 +70,34 @@ end -- on handle message function remote_build_server:_on_handle(stream, msg) local session_id = msg:session_id() + local session = self:_session(session_id) 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 session_errs + local session_ok = try + { + function() + if msg:is_connect() then + session:open() + elseif msg:is_disconnect() then + session:close() + self._SESSIONS[session_id] = nil + elseif msg:is_sync() then + session:sync() + elseif msg:is_clean() then + session:clean() + end + return true + end, + catch + { + function (errors) + if errors then + session_errs = tostring(errors) + end + end + } + } local respmsg = msg:clone() respmsg:status_set(session_ok) if not session_ok and session_errs then @@ -91,80 +109,17 @@ end -- get session function remote_build_server:_session(session_id) - return self._SESSIONS[session_id] -end - --- open session -function remote_build_server:_session_open(session_id) - local session = server_session(session_id) - local errors - local ok = try - { - function () - session:open() - return true - end, - catch - { - function (errs) - errors = tostring(errs) - end - } - } - if ok then + local session = self._SESSIONS[session_id] + if not session then + session = server_session(session_id) self._SESSIONS[session_id] = session end - return ok, errors + return session end -- close session function remote_build_server:_session_close(session_id) - local session = self:_session(session_id) - local errors - local ok = try - { - function () - if session then - session:close() - end - return true - end, - catch - { - function (errs) - errors = tostring(errs) - end - } - } - if ok then - self._SESSIONS[session_id] = nil - end - 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 + self._SESSIONS[session_id] = nil end function remote_build_server:__tostring() diff --git a/xmake/modules/private/service/remote_build/session.lua b/xmake/modules/private/service/remote_build/session.lua index 527d49723..fdce8d3a6 100644 --- a/xmake/modules/private/service/remote_build/session.lua +++ b/xmake/modules/private/service/remote_build/session.lua @@ -46,8 +46,15 @@ function session:close() self:_reset_sourcedir() end --- syncfiles -function session:syncfiles() +-- sync files +function session:sync() +end + +-- clean files +function session:clean() + vprint("%s: cleaning files in %s ..", self, self:workdir()) + os.tryrm(self:workdir()) + vprint("%s: cleaning files ok", self) end -- get work directory @@ -68,6 +75,10 @@ end function session:_reset_sourcedir() end +function session:__tostring() + return string.format("<session %s>", self:id()) +end + function main(session_id) local instance = session() instance:init(session_id) diff --git a/xmake/plugins/service/main.lua b/xmake/plugins/service/main.lua index 660903412..82c7cd7b8 100644 --- a/xmake/plugins/service/main.lua +++ b/xmake/plugins/service/main.lua @@ -27,6 +27,7 @@ import("private.service.stop_service") import("private.service.connect_service") import("private.service.reconnect_service") import("private.service.disconnect_service") +import("private.service.clean_files") import("private.service.import_config") import("private.service.show_logs") import("private.service.show_status") @@ -46,6 +47,8 @@ function main() reconnect_service() elseif option.get("disconnect") then disconnect_service() + elseif option.get("clean") then + clean_files() elseif option.get("config") then import_config() elseif option.get("logs") then diff --git a/xmake/plugins/service/xmake.lua b/xmake/plugins/service/xmake.lua index b819c7157..0cd101972 100644 --- a/xmake/plugins/service/xmake.lua +++ b/xmake/plugins/service/xmake.lua @@ -28,9 +28,10 @@ task("service") {nil, "start", "k", nil, "Start daemon service." }, {nil, "restart", "k", nil, "Restart daemon service." }, {nil, "stop" , "k", nil, "Stop daemon service." }, - {nil, "connect" , "k", nil, "Connect the remote daemon service." }, - {nil, "reconnect", "k", nil, "Reconnect the remote daemon service." }, - {nil, "disconnect", "k", nil, "Disconnect the remote daemon service." }, + {nil, "connect" , "k", nil, "Connect current project to the remote daemon service." }, + {nil, "reconnect", "k", nil, "Reconnect current project to the remote daemon service." }, + {nil, "disconnect", "k", nil, "Disconnect current project in the remote daemon service." }, + {nil, "clean", "k", nil, "Clean current project files in the remote daemon service." }, {nil, "config", "kv", nil, "Import the configuration file. (default: ~/.xmake/service.conf)", "e.g.", " - xmake service --config=/tmp/config.lua" }, |
