From 7160b2eba91788fe097d7da8225353145e683fa0 Mon Sep 17 00:00:00 2001 From: Cyberarm Date: Tue, 13 Oct 2026 23:34:58 -0500 Subject: [PATCH] Update worker game server updater to prefix eventbus events with 'game_', make Window handle worker's game server updater events --- lib/window.rb | 32 ++++++++++++++++++++++++++++++++ lib/worker.rb | 4 ++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/window.rb b/lib/window.rb index ef01d4b..0ee0d43 100644 --- a/lib/window.rb +++ b/lib/window.rb @@ -10,6 +10,38 @@ module W3DHubLauncher MemCache[:game_server_pings] = payload end + CyberarmEngine::EventBus.subscribe("game_server_list", self) do |payload| + MemCache[:servers] = payload.map { |server| Worker::Api::GameServer.new(server) } + end + + CyberarmEngine::EventBus.subscribe("game_server_added", self) do |payload| + existing_game_server = MemCache[:servers]&.find { |s| s.id == payload["id"] } + game_server = Worker::Api::GameServer.new(payload) + + if existing_game_server + MemCache[:servers][MemCache[:servers].index(existing_game_server)] = game_server + else + MemCache[:servers] << game_server + end + end + + CyberarmEngine::EventBus.subscribe("game_server_updated", self) do |payload| + existing_game_server = MemCache[:servers]&.find { |s| s.id == payload["id"] } + game_server = Worker::Api::GameServer.new(payload) + + if existing_game_server + MemCache[:servers][MemCache[:servers].index(existing_game_server)] = game_server + else + MemCache[:servers] << game_server + end + end + + CyberarmEngine::EventBus.subscribe("game_server_removed", self) do |payload| + game_server = MemCache[:servers]&.find { |s| s.id == payload["id"] } + + MemCache[:servers].delete(game_server) if game_server + end + push_state(States::Boot) # push_state(States::Interface) end diff --git a/lib/worker.rb b/lib/worker.rb index cca10da..71448bc 100644 --- a/lib/worker.rb +++ b/lib/worker.rb @@ -136,12 +136,12 @@ module W3DHubLauncher else # add @game_servers << game_server end - broadcast(hash["type"].to_sym, data: hash["data"]) + broadcast(:"game_#{hash["type"]}", data: hash["data"]) when "server_removed" game_server = @game_servers.find { |s| s.id == hash["data"]["id"] } @game_servers.delete(game_server) if game_server - broadcast(hash["type"].to_sym, data: hash["data"]["id"]) + broadcast(:"game_#{hash["type"]}", data: hash["data"]) when "server_details" # TODO