diff --git a/packages/web_ui/src/util/websocket.jsx b/packages/web_ui/src/util/websocket.jsx index 6b3b983f..b08b2fc6 100644 --- a/packages/web_ui/src/util/websocket.jsx +++ b/packages/web_ui/src/util/websocket.jsx @@ -273,6 +273,12 @@ export class Control extends libLink.Link { handler(info); } } + if (info.slave_id !== undefined) { + let slaveHandlers = this.slaveLogHandlers.get(info.slave_id); + for (let handler of slaveHandlers || []) { + handler(info); + } + } } async onInstanceLog(id, handler) { diff --git a/plugins/inventory_sync/instance.js b/plugins/inventory_sync/instance.js index 159c2c12..fadd0198 100644 --- a/plugins/inventory_sync/instance.js +++ b/plugins/inventory_sync/instance.js @@ -20,41 +20,40 @@ class InstancePlugin extends libPlugin.BaseInstancePlugin { // },5000) - this.instance.server.on("ipc-inventory_sync_upload", content => - this.handleUpload(content).catch(err => this.logger.error( - `Error handling ipc-inventory_sync_upload:\n${err.stack}` - )) - ) - this.instance.server.on("ipc-inventory_sync_download", content => - this.handleDownload(content).catch(err => this.logger.error( - `Error handling ipc-inventory_sync_download:\n${err.stack}` - )) - ) + this.instance.server.on("ipc-inventory_sync_upload", content => this.handleUpload(content).catch(err => this.logger.error( + `Error handling ipc-inventory_sync_upload:\n${err.stack}` + )) + ); + this.instance.server.on("ipc-inventory_sync_download", content => this.handleDownload(content).catch(err => this.logger.error( + `Error handling ipc-inventory_sync_download:\n${err.stack}` + )) + ); } onMasterConnectionEvent(event) { - console.log("Connectionevent", event) + console.log("Connectionevent", event); if (event === "connect") { } } async handleUpload(player) { - console.log("Uploading", player) + console.log("Uploading", player); this.info.messages.upload.send(this.instance, { instance_id: this.instance.id, instance_name: this.instance.name, player_name: player.name, inventory: JSON.stringify(player), - }) + }); } + async handleDownload(player) { - console.log("Downloading", player.player_name) + console.log("Downloading", player.player_name); let response = await this.info.messages.download.send(this.instance, { - player_name: player.player_name - }) + player_name: player.player_name, + }); if (response.inventory) { - console.log("Sending command") - await this.sendRcon(`/sc inventory_sync.downloadInventory('${response.player_name}', '${libLuaTools.escapeString(response.inventory)}')`) + console.log("Sending command"); + await this.sendRcon(`/sc inventory_sync.downloadInventory('${response.player_name}', '${libLuaTools.escapeString(response.inventory)}')`); } } diff --git a/plugins/inventory_sync/master.js b/plugins/inventory_sync/master.js index 29f080b9..d2ffd5aa 100644 --- a/plugins/inventory_sync/master.js +++ b/plugins/inventory_sync/master.js @@ -38,30 +38,34 @@ class MasterPlugin extends libPlugin.BaseMasterPlugin { }); }, this.master.config.get("inventory_sync.autosave_interval") * 1000); } - async uploadRequestHandler(message) { - console.log("Saving inventory for", message.data.player_name) - this.inventories[message.data.player_name] = message.data.inventory - return { success: true } + async uploadRequestHandler(message) { + console.log("Saving inventory for", message.data.player_name); + this.inventories[message.data.player_name] = message.data.inventory; + + return { success: true }; } + async downloadRequestHandler(message) { - console.log("Downloading inventory for", message.data.player_name) + console.log("Downloading inventory for", message.data.player_name); return { player_name: message.data.player_name, - inventory: this.inventories[message.data.player_name] - } + inventory: this.inventories[message.data.player_name], + }; } + async onShutdown() { clearInterval(this.autosaveId); await saveDatabase(this.master.config, this.inventories, this.logger); } + async databaseStatsRequestHandler(message) { let inventories = Object.keys(this.inventories) .map(name => ({ name, - length: this.inventories[name].length + length: this.inventories[name].length, })) - .sort((a, b) => a.stringified.length - b.stringified.length) + .sort((a, b) => a.stringified.length - b.stringified.length); return { database_size: inventories.map(x => x.length).reduce((a, b) => b - a, 0), database_entries: inventories.length, @@ -69,7 +73,7 @@ class MasterPlugin extends libPlugin.BaseMasterPlugin { name: inventories[0].name, size: inventories[0].length, }, - } + }; } } diff --git a/plugins/inventory_sync/web/index.jsx b/plugins/inventory_sync/web/index.jsx index 2229428e..38328bc5 100644 --- a/plugins/inventory_sync/web/index.jsx +++ b/plugins/inventory_sync/web/index.jsx @@ -7,37 +7,37 @@ import info from "../info"; import "./index.css"; function InventoryPage() { - let control = useContext(ControlContext); + let control = useContext(ControlContext); - let [statsData, updateStatsData] = useState() + let [statsData, updateStatsData] = useState(); - useEffect(() => { - (async () => { - // Get statistics - updateStatsData(await info.messages.databaseStats.send(control, {})) - })() - }, []) + useEffect(() => { + (async () => { + // Get statistics + updateStatsData(await info.messages.databaseStats.send(control, {})); + })(); + }, []); - return -

Inventory sync

- {statsData && <> -

Database size: {Math.round(statsData.database_size / 1000)}kB

-

Database entries: {statsData.database_entries}

-

Largest entry is {statsData.largest_entry.name} with {(statsData.largest_entry.size / 1000)}kB

- } -
; + return +

Inventory sync

+ {statsData && <> +

Database size: {Math.round(statsData.database_size / 1000)}kB

+

Database entries: {statsData.database_entries}

+

Largest entry is {statsData.largest_entry.name} with {(statsData.largest_entry.size / 1000)}kB

+ } +
; } export class WebPlugin extends libPlugin.BaseWebPlugin { - async init() { - this.pages = [ - { path: "/inventory", sidebarName: "Inventory sync", content: }, - ]; - } + async init() { + this.pages = [ + { path: "/inventory", sidebarName: "Inventory sync", content: }, + ]; + } - onMasterConnectionEvent(event) { - if (event === "connect") { + onMasterConnectionEvent(event) { + if (event === "connect") { - } - } + } + } }