diff --git a/lib/constants.rb b/lib/constants.rb index c321c3b..bb1dc0f 100644 --- a/lib/constants.rb +++ b/lib/constants.rb @@ -3,6 +3,7 @@ module W3DHubLauncher ROOT_PATH = Dir.pwd CONFIG_PATH = "#{Dir.home}/.config/#{DIRECTORY_NAME}".freeze + SETTINGS_FILE_PATH = "#{CONFIG_PATH}/settings.json".freeze CACHE_PATH = "#{Dir.home}/.cache/#{DIRECTORY_NAME}".freeze DEFAULT_PACKAGE_CACHE_PATH = "#{CACHE_PATH}/packages".freeze DEFAULT_APPLICATIONS_PATH = "#{Dir.home}/.local/share/#{DIRECTORY_NAME}/applications".freeze diff --git a/lib/pages/boot/start_up.rb b/lib/pages/boot/start_up.rb index a2450ee..d85c613 100644 --- a/lib/pages/boot/start_up.rb +++ b/lib/pages/boot/start_up.rb @@ -30,6 +30,9 @@ module W3DHubLauncher end end + # FIXME: Ask worker to start websocket connections... + # WORKER.connect + next_step end diff --git a/lib/pages/server_browser.rb b/lib/pages/server_browser.rb index ed83ddd..fe5fc7f 100644 --- a/lib/pages/server_browser.rb +++ b/lib/pages/server_browser.rb @@ -44,6 +44,10 @@ module W3DHubLauncher end end end + + button(safe_get_image("#{ROOT_PATH}/media/icons/target.png"), image_height: 1.0, tip: "Direct Connect", padding: HALF_PADDING, enabled: false, margin_left: PADDING) do + dialog(Dialog::DirectConnect) + end end # game content container @@ -57,6 +61,7 @@ module W3DHubLauncher def focus CyberarmEngine::EventBus.subscribe("game_server_pings", self, :handle_game_server_pings) + CyberarmEngine::EventBus.subscribe("game_server_list", self, :handle_game_server_list) CyberarmEngine::EventBus.subscribe("game_server_added", self, :handle_game_server_updated) # <- not a typo CyberarmEngine::EventBus.subscribe("game_server_updated", self, :handle_game_server_updated) CyberarmEngine::EventBus.subscribe("game_server_removed", self, :handle_game_server_removed) @@ -67,6 +72,7 @@ module W3DHubLauncher def blur CyberarmEngine::EventBus.unsubscribe("game_server_pings", self) + CyberarmEngine::EventBus.unsubscribe("game_server_list", self) CyberarmEngine::EventBus.unsubscribe("game_server_added", self) CyberarmEngine::EventBus.unsubscribe("game_server_updated", self) CyberarmEngine::EventBus.unsubscribe("game_server_removed", self) @@ -77,7 +83,7 @@ module W3DHubLauncher def handle_game_server_pings(payload) addresses = payload.keys - MemCache[:servers]&.select { |s| addresses.include?(s.address) }.each do |server| + MemCache[:servers]&.select { |s| addresses.include?(s.address) }&.each do |server| w = find_element_by_tag(@servers_container, :"server_#{server.id}") ping_label = find_element_by_tag(w, :ping_label) ping_bar = find_element_by_tag(w, :ping_bar) @@ -95,6 +101,12 @@ module W3DHubLauncher # TODO: Sort servers? end + def handle_game_server_list + after(1_000) do + populate_server_list + end + end + def handle_game_server_updated(payload) game_server = Worker::Api::GameServer.new(payload) diff --git a/lib/worker.rb b/lib/worker.rb index 71448bc..7c2d56a 100644 --- a/lib/worker.rb +++ b/lib/worker.rb @@ -11,6 +11,7 @@ module W3DHubLauncher attr_reader :w3dhub_api, :settings def initialize + @queue = [] end def connect @@ -18,6 +19,10 @@ module W3DHubLauncher @buffer = StringIO.new @socket = UNIXSocket.new(IPC_PATH) + + while (payload = @queue.shift) + @socket.puts(payload) + end rescue Errno::ENOENT sleep 1 retry @@ -239,10 +244,12 @@ module W3DHubLauncher # pp [:client_request, query] payload = { type: query.type, request_id: query.request_id, data: query.data }.to_json - if respond_to?(query.type) + raise "UNKNOWN REQUEST: #{query}" unless respond_to?(query.type) + + if connected? @socket.puts(payload) else - raise "UNKNOWN REQUEST: #{query}" + @queue << payload end end @@ -497,7 +504,7 @@ module W3DHubLauncher begin @settings = Api::Settings.new(JSON.parse(query.data)) FileUtils.mkdir_p(W3DHubLauncher::CONFIG_PATH) - File.write("#{W3DHubLauncher::CONFIG_PATH}/settings.json", query.data) + File.write(W3DHubLauncher::SETTINGS_FILE_PATH, query.data) result.data = query.data rescue => e