summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-04-12 22:41:15 +0800
committerruki <[email protected]>2022-04-12 22:41:15 +0800
commit1ef23a02096321059a14afd8b6bc38eeb3b3d282 (patch)
tree8bb1c46f0ebbad9858d4fa659d69035f639575a8
parent8f1db2b9b2df2b7223fb2878a1dc7d8cf7b1adfd (diff)
clean files in server
-rw-r--r--xmake/modules/private/service/clean_files.lua30
-rw-r--r--xmake/modules/private/service/disconnect_service.lua2
-rw-r--r--xmake/modules/private/service/message.lua14
-rw-r--r--xmake/modules/private/service/remote_build/client.lua30
-rw-r--r--xmake/modules/private/service/remote_build/server.lua107
-rw-r--r--xmake/modules/private/service/remote_build/session.lua15
-rw-r--r--xmake/plugins/service/main.lua3
-rw-r--r--xmake/plugins/service/xmake.lua7
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" },