Loads the user's library from the /Library/Games endpoint and displays it immediately. This route returns a full data set for the user's games. Images are rendered directly from the server. The import still runs in the background, preserving any offline functionality.
Adds a new section "Scripting" in the server UI where PowerShell modules can be defined. These can be used for defining a library of functions that can be used in any script. These modules are automatically synced to the launcher and imported upon script execution.
Amends the tool installation to use game install directory and correctly populate actions. Tools previously used an undocumented/unpopulated/inaccessible global install directory. This has been changed to use the game's install directory. Uninstall scripts are also now executed for tools when the game is uninstalled.
Fixes#414
Sends a keepalive/heartbeat signal across RPC while a game is running. Server-side this enables the ability to manage play session state with realtime information instead of hoping that the client will stop the play session. Keepalives are tracked in server cache allowing for future potential horizontally-scaled server instances.
- Add ability to connect to server
- Add uploading of finished package to server
- Add metadata lookup when connected to server
- Fix layout when specifying action
- Hide finish button at generate step
RunWrapper scripts were defined as a script type but never executed. This adds full execution support during game launch, with proper game running state tracking and cancellation/stop support including child process cleanup.
Tracks files created in the game's install directory when the install script is run. This results in the ability to delete redist files when the game is uninstalled.
Split the single try/catch into three isolated blocks so that:
- ObjectDisposedException on EndReceiveFrom stops the loop cleanly
- Other socket errors still re-arm the socket to keep listening
- Non-JSON packets (e.g. loopback of our own probe) are silently
dropped without killing the receive loop
Switch SendAsync from UdpClient.SendAsync to Socket.SendTo, and enable
the broadcast socket option before binding. The UdpClient path was not
reliably sending to broadcast addresses on all platforms.