Files
w3dhub_linux_launcher/lib/worker.rb
2026-06-22 10:55:51 -05:00

90 lines
2.0 KiB
Ruby

module W3DHubLauncher
class Worker
Response = Data.define(:status, :request_id, :data)
def initialize
@threads = []
@requests = []
@settings = # Settings.new
# next available request_id to assign incoming requests
@request_id = 0
# listen for requests from frontend
listener = Thread.new { listen }
# connect to and monitor GSH web service
@threads << Thread.new { game_server_hub_websocket }
# connect to and monitor Backend web service
@threads << Thread.new { backend_websocket }
@w3dhub_api = W3DHubLauncher::W3DHubApi.new
listener.join
end
def listen
loop do
query = Ractor.receive
pp query
if respond_to?(query.type)
Async do
send(query.type, query)
end
else
raise "UNKNOWN REQUEST: #{query}"
end
end
end
def game_server_hub_websocket
end
def backend_websocket
end
#
# ------------ query / request handlers ------------
#
def fetch_url(query)
end
def download_url(query)
end
def w3dhub_api_call(query)
result = @w3dhub_api.send(query.data[:call], *(query.data[:arguments] || []))
response = Response.new(result.okay? ? Request::STATUS_COMPLETE : Request::STATUS_ERROR, query.request_id, result)
Ractor.main.send(response)
end
def update_settings(query)
result = CyberarmEngine::Result.new
FileUtils.mkdir_p(W3DHubLauncher::CONFIG_PATH) # FIXME: FAILABLE!
File.write("#{W3DHubLauncher::CONFIG_PATH}/settings.json", query.data) # FIXME: FAILABLE!
result.data = query.data
response = Response.new(result.okay? ? Request::STATUS_COMPLETE : Request::STATUS_ERROR, query.request_id, result)
Ractor.main.send(response)
end
def install_application(query)
end
def update_application(query)
end
def repair_application(query)
end
def move_application(query)
end
def uninstall_application(query)
end
end
end