More work on Ractor communication. Need to have a proper think about how to keep it DRY and KISS :)

This commit is contained in:
2026-04-22 23:12:30 -05:00
parent c8bb271d82
commit 0eb188f72e
8 changed files with 51 additions and 40 deletions

View File

@@ -15,23 +15,16 @@ module W3DHubLauncher
title "Initial Setup"
caption "Please confirm launcher's default settings and make any desired tweaks.", font: FONT_REGULAR
flow(width: 1.0, height: 40, margin_top: PADDING) do
tagline "Launcher data directory", height: 1.0, text_v_align: :center
edit_line format("%s/.local/share/W3D Hub", Dir.home), fill: true
button "Browse..."
end
inscription "Location where the launcher stores it's configuration files and cache interface data."
flow(width: 1.0, height: 40, margin_top: HALF_PADDING) do
tagline "Launcher package cache directory", height: 1.0, text_v_align: :center
edit_line format("%s/.local/share/W3D Hub/package-cache", Dir.home), fill: true
edit_line DEFAULT_PACKAGE_CACHE_PATH, fill: true
button "Browse..."
end
inscription "Location where the launcher will download application packages."
flow(width: 1.0, height: 40, margin_top: HALF_PADDING) do
tagline "Application installation directory", height: 1.0, text_v_align: :center
edit_line format("%s/.local/share/W3D Hub/applications", Dir.home), fill: true
edit_line DEFAULT_APPLICATIONS_PATH, fill: true
button "Browse..."
end
inscription "Location where the launcher will install new applications."
@@ -53,8 +46,18 @@ module W3DHubLauncher
flow(width: 1.0, padding_top: PADDING) do
flow(fill: true)
button "Accept" do
page(Page::Boot::StartUp)
button "Accept" do |btn|
btn.enabled = false
Worker::Api.update_settings({}) do |result|
if result.okay?
page(Page::Boot::StartUp)
else
btn.enabled = true
end
puts "NOW!"
end
end
end
end

View File

@@ -4,8 +4,8 @@ module W3DHubLauncher
self.show_cursor = true
self.caption = format("%s | v%s (%s)", NAME, VERSION, VERSION_NAME) # "Cyberarm's W3D Hub Linux Launcher | v2.0.0 alpha"
# push_state(States::Boot)
push_state(States::Interface)
push_state(States::Boot)
# push_state(States::Interface)
end
def needs_redraw?

View File

@@ -6,6 +6,8 @@ module W3DHubLauncher
@threads = []
@requests = []
@settings = # Settings.new
# next available request_id to assign incoming requests
@request_id = 0
@@ -35,6 +37,13 @@ module W3DHubLauncher
response = Response.new(result.okay? ? Request::STATUS_COMPLETE : Request::STATUS_ERROR, query.request_id, result)
Ractor.main.send(response)
end
when Request::LAUNCHER_UPDATE_SETTINGS
result = CyberarmEngine::Result.new
FileUtils.mkdir_p(W3DHubLauncher::CONFIG_PATH) # FAILABLE!
File.write("#{W3DHubLauncher::CONFIG_PATH}/settings.json", query.data) # FAILABLE!
result.data = query.data
response = Response.new(result.okay? ? Request::STATUS_COMPLETE : Request::STATUS_ERROR, query.request_id, result)
Ractor.main.send(response)
else
raise "UNKNOWN REQUEST"
end

View File

@@ -3,76 +3,71 @@
module W3DHubLauncher
class Worker
class Api
Request = Data.define(:coming_soon)
def initialize
@requests = []
end
# downloads requested resource, returns raw string
def fetch_url
def self.fetch_url
end
# downloads requested resource, periodically reporting progress until completion, returning path for file on disk
def download_url
def self.download_url
end
# returns user account data
#
# automatically handles signing in / refreshing token (DOES NOT remove account data if failed to refresh token due to network timeout)
def account
def self.account
end
# returns launcher settings
def settings
def self.settings
end
# write updated launcher settings
def update_settings
def self.update_settings(settings, &block)
Worker::Request.new(Request::LAUNCHER_UPDATE_SETTINGS, settings.to_json, &block)
end
# returns list of available applications
#
# if updated list is requested, return cached version immediately and then the updated list later.
def applications
def self.applications
end
# returns current list of servers as reported from GSH / cache
def servers
def self.servers
end
# returns news for application
def news
def self.news
end
# request installation of application
#
# periodically reports progress until completion
def install_application
def self.install_application
end
# request update of application
#
# periodically reports progress until completion
def update_application
def self.update_application
end
# request repair of application
#
# periodically reports progress until completion
def repair_application
def self.repair_application
end
# request relocation of application
#
# periodically reports progress until completion
def move_application
def self.move_application
end
# request removal of application
#
# periodically reports progress until completion
def uninstall_application
def self.uninstall_application
end
end
end

View File

@@ -6,6 +6,8 @@ module W3DHubLauncher
FETCH_URL = 0
DOWNLOAD_URL = 1
W3DHUB_API_CALL = 10
LAUNCHER_SETTINGS = 1000
LAUNCHER_UPDATE_SETTINGS = 1001
STATUS_ERROR = -1 # request has failed
STATUS_PENDING = 0 # request has not yet started
@@ -53,9 +55,8 @@ module W3DHubLauncher
pp [event, data]
case event
when STATUS_COMPLETE
Request.requests.delete(self)
when STATUS_ERROR
when STATUS_ERROR, STATUS_COMPLETE
@callback&.call(data)
Request.requests.delete(self)
end
end