summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2022-05-14 22:06:32 +0800
committerruki <[email protected]>2022-05-14 22:06:32 +0800
commit98322b100895e773527d7d0ce9d9362e1a559ecb (patch)
tree733ef498b48652614a8c68e672557783228ec306
parent59ef4006b44da3ee970c286fcfe5b49bc67cc54f (diff)
get client session
-rw-r--r--xmake/modules/private/service/distcc_build/client.lua16
-rw-r--r--xmake/modules/private/service/distcc_build/client_session.lua68
2 files changed, 21 insertions, 63 deletions
diff --git a/xmake/modules/private/service/distcc_build/client.lua b/xmake/modules/private/service/distcc_build/client.lua
index 599e123b1..13931fcc8 100644
--- a/xmake/modules/private/service/distcc_build/client.lua
+++ b/xmake/modules/private/service/distcc_build/client.lua
@@ -209,6 +209,9 @@ function distcc_build_client:iorunv(program, argv, opt)
-- lock this host
self:_host_status_lock(host)
+ -- get the host session
+ local session = self:_host_status_session(host)
+
-- TODO, do distcc compilation
local outdata, errdata = os.iorunv(program, argv, opt)
@@ -310,6 +313,19 @@ function distcc_build_client:_host_status_unlock(host_status)
self._RUNNING = running
end
+-- get host session
+function distcc_build_client:_host_status_session(host_status)
+ host_status.sessions = host_status.sessions or {}
+ local running = host_status.running
+ local session = host_status.sessions[running]
+ if not session then
+ local sock = assert(socket.connect(host_status.addr, host_status.port), "%s: server unreachable!", self)
+ session = client_session(self, host_status.session_id, sock)
+ host_status.sessions[running] = session
+ end
+ return session
+end
+
-- get the session id, only for unique project
function distcc_build_client:_session_id(addr, port)
local hosts = self:status().hosts
diff --git a/xmake/modules/private/service/distcc_build/client_session.lua b/xmake/modules/private/service/distcc_build/client_session.lua
index 9f9a36c79..c3a1367df 100644
--- a/xmake/modules/private/service/distcc_build/client_session.lua
+++ b/xmake/modules/private/service/distcc_build/client_session.lua
@@ -28,13 +28,15 @@ import("core.base.hashset")
import("core.base.scheduler")
import("private.service.client_config", {alias = "config"})
import("private.service.message")
+import("private.service.stream", {alias = "socket_stream"})
-- define module
local client_session = client_session or object()
-- init client session
-function client_session:init(client, session_id)
+function client_session:init(client, session_id, sock)
self._ID = session_id
+ self._STREAM = socket_stream(sock)
self._CLIENT = client
end
@@ -48,37 +50,6 @@ function client_session:client()
return self._CLIENT
end
--- open client session
-function client_session:open()
- if self:is_connected() then
- return
- end
-
- -- update status
- local status = self:status()
- status.connected = true
- status.session_id = self:id()
- self:status_save()
-end
-
--- close client session
-function client_session:close()
- if not self:is_connected() then
- return
- end
-
- -- update status
- local status = self:status()
- status.connected = false
- status.session_id = self:id()
- self:status_save()
-end
-
--- set stream
-function client_session:stream_set(stream)
- self._STREAM = stream
-end
-
-- get stream
function client_session:stream()
return self._STREAM
@@ -89,41 +60,12 @@ function client_session:workdir()
return path.join(self:server():workdir(), "sessons", self:id())
end
--- is connected?
-function client_session:is_connected()
- return self:status().connected
-end
-
--- get the status
-function client_session:status()
- local status = self._STATUS
- local statusfile = self:statusfile()
- if not status then
- if os.isfile(statusfile) then
- status = io.load(statusfile)
- end
- status = status or {}
- self._STATUS = status
- end
- return status
-end
-
--- save status
-function client_session:status_save()
- io.save(self:statusfile(), self:status())
-end
-
--- get status file
-function client_session:statusfile()
- return path.join(self:workdir(), "status.txt")
-end
-
function client_session:__tostring()
return string.format("<session %s>", self:id())
end
-function main(session_id)
+function main(client, session_id, job_id, sock)
local instance = client_session()
- instance:init(session_id)
+ instance:init(client, session_id, job_id, sock)
return instance
end