feat: Enhance UgcPurchasablesController to handle bulk requests with object arrays

- Updated Bulk method to parse incoming JSON object arrays for UGC item IDs.
- Introduced ReadBulkIdsAsync to handle both object arrays and flat GUID lists.
- Added synthetic placeholder responses for missing UGC items to prevent client errors.

feat: Implement MatchmakeRoom and MatchmakeSubRoom endpoints in GoToController

- Added MatchmakeRoom and MatchmakeSubRoom methods to facilitate joining public and sub-rooms by numeric ID.
- Enhanced ApplySubRoomMutation to ensure proper state transitions for sub-rooms.
- Improved logging for matchmaking actions.

fix: Refactor PlayerSettingsController to handle database save exceptions

- Introduced SaveSettingsChangesAsync to manage DbUpdateException for busy SQLite scenarios.
- Updated methods to call SaveSettingsChangesAsync instead of direct SaveChangesAsync.

chore: Update URL coverage documentation for new matchmaking endpoints

- Documented new MatchmakeRoom and MatchmakeSubRoom endpoints in url-coverage.md.

chore: Add default room data file for room loading

- Included default_room.room to serve as a fallback for missing room data.

fix: Improve SQLite concurrency handling in DatabaseBootstrap

- Configured SQLite to use WAL mode and set a busy timeout for better concurrency.

chore: Create SqliteErrors utility for handling SQLite exceptions

- Added SqliteErrors class to encapsulate logic for detecting busy SQLite exceptions.

refactor: Update RoomDataBlobService to serve default room data

- Modified GetDefaultBlob to load and serve a default room blob with proper role data.
This commit is contained in:
Alexa
2026-06-23 20:54:29 +03:00
parent ed6c13ec07
commit fda64ca3ce
18 changed files with 1327 additions and 170 deletions
@@ -37,8 +37,8 @@ message OverridableListStringData {
// ── Per-role permission grants (rec_room/player_roles/player_room_role_data.proto)
//
// Field numbers verified against the dump's `*FieldNumber` constants
// (TypeDefIndex 15953-ish in the 2020 build) and against the 2026 .proto.
// Field numbers verified against the 2023 WriteTo disassembly in
// C:\tmp\recroom-2023-03-21-isil\IsilDump\RecRoom.Protobuf.Runtime.
message PlayerRoomRoleData {
reserved 15;
@@ -70,14 +70,17 @@ message PlayerRoomRoleData {
OverridableBoolData disable_mic_auto_mute = 25;
OverridableBoolData can_use_share_cam = 26;
string role_guid = 27;
OverridableBoolData unknown_permission_20 = 28;
OverridableBoolData unknown_permission_21 = 29;
OverridableBoolData unknown_permission_22 = 30;
OverridableBoolData unknown_permission_23 = 31;
}
// ── Role collection (rec_room/player_roles/room_role_collection_data.proto)
message RoomRoleCollectionData {
repeated PlayerRoomRoleData room_roles = 1;
// field 2 (rec_net_migration_version) intentionally omitted — its enum
// type doesn't exist in the 2020 build, and proto3 default 0 is fine.
int32 rec_net_migration_version = 2;
}
// ── PersistedRoomData top-level (rec_room/persistence/persisted_room_data.proto)