2024.9.30.1215 - Optimized voice/pose hitch on join, account deletion tool...

Resonite

Enter a novel digital universe with infinite possibilities. Whether you resonate with people around the world in a casual conversation, playing games and socializing or you riff off each other when creating anything from art to programming complex games, you'll find your place here.

Hello everyone! I got a new build for you, with another chunk of performance optimizations - this build fixes the voice/pose hitch when users join sessions, ensuring they stay smooth even when the sessions grow big! This has been done by rewriting the session networking handling system, which made the code a lot nicer as well, fixed, optimized and improved a bunch of things along the way and opened more doors towards future improvements as well. There are a number of smaller improvements too, regarding moderation and group management. I'll be traveling tomorrow, so things will probably be busy, but I hope this build helps quite a bit. There's a lot more performance optimizations to be done, especially to improve the overall framerates! Also big thanks to everyone who helped test this new update, including: @bredo, @ohzee, @kyuubiyoru, @jackthefoxotter, @orange3134, @readun, @j4.lc, @modernballoonie and @foxbox. ! [h2]New Features:[/h2] - When account restrictions are applied, the user will receive an email in addition to Resonite bot message (implemented by @dantetucker) -- This also fixes issue where full account bans (which are very rare) are not able to learn reason for banning through their account - `/changeGroupName ` can now be used by group admins (requested by @zandario, issue #394, implemented by @dantetucker) - Added mechanism for replacing invalid references in hierarchy to allow upgrading components and nodes with changed structure -- This is more of an internal change right now, which will help implement backwards compatibility when upgrading code - Add Account Deletion command-line tool (requested by @CanadianGIT on behalf of the moderation team) -- This allows you to request / cancel account deletion without needing to log into Resonite itself -- You will need to provide your login credentials (username & password) to trigger/cancel the deletion -- Once activated, the deletion process works the same - there is one week grace period, during which you'll receive emails warning about the impeding account deletion -- This tool also works when the account is currently banned, allowing users with account restrictions to remove them -- Please note that we do keep minumum information necessary to detect ban evasion even when account is deleted. Deleting your account won't let you bypass the ban and attempting to do so might result in even more severe restrictions -- You can find this under "Tools" in the Steam installation. It requires .NET 8 runtime to run. -- Funny anecode - I implemented this while on a train to Prague [h2]Optimizations:[/h2] - Reworked session networking handling to remove voice & pose hitches caused by users joining a session (reported by "literally everyone", issue #1477) -- Processing of incoming/outgoing messages - encoding/decoding and so on is now handled in parallel with the task parallel library -- Majority of processing for control messages (initial join, asset transfers) has been hoisted out of the world sync loop, allowing them to be processed faster and reducing overhead on the world loop itself -- Improved the security/robustness of the initial handshake when joining session -- This is a significant rewrite, which significantly improves the overall quality of the code and makes working with this system much easier in the future and will make fixing bugs, security/privacy issues and adding new features (e.g. mesh networking) much easier -- Note that there is still a data model hitch that happens during the initial capture of the world state. This should not affect any voices and user pose streams. Optimizing this is a different set of optimizations in the future. - Rework synchronization of time from async stream messages to avoid constant memory allocations - Rework async stream decoding to reduce memory allocations - Optimize building a list of users for sync message transmission - Fix freshly joined users receiving host streams when they haven't requested streams yet, causing unecessary overhead - Fixed session processing not returning pooled resources, resulting in constant memory allocations and GC pressure [h2]Tweak:[/h2] - World configuration changes will not be logged for userspace and worlds with only the host in them to eliminate clutter (implemented by @probableprime) [h2]Locale:[/h2] - Merged German locale update by @muppeq - Merged Japanese locale update by @.aesc - Merged French locale update by @j4.lc - Merged Korean locale update by @mirpasec - Merged Chinese locale update by modimobeikete [h2]Fixes:[/h2] - Fixed failure message displaying wrong port when starting LNL listener fails (fixed by @probableprime)