You've already forked Nitro_Render_V3
mirror of
https://github.com/duckietm/Nitro_Render_V3.git
synced 2026-06-19 15:06:20 +00:00
fix(session): invalidate RoomSession snapshot on room-data and permission changes
getActiveRoomSessionSnapshot() caches the frozen snapshot keyed on the session reference, but RoomDataHandler (tradeMode/groupId/isGuildRoom/doorMode/allowPets) and RoomPermissionsHandler (controllerLevel/owner) mutate those fields on the same session object without invalidating the cache. Any consumer reading a mutable field via useActiveRoomSessionSnapshot would get stale data and never re-render. Expose invalidateRoomSessionSnapshot() on IRoomHandlerListener and call it from both handlers after they mutate the session.
This commit is contained in:
@@ -5,4 +5,5 @@ export interface IRoomHandlerListener
|
||||
getSession(id: number): IRoomSession;
|
||||
sessionUpdate(id: number, type: string): void;
|
||||
sessionReinitialize(fromRoomId: number, toRoomId: number): void;
|
||||
invalidateRoomSessionSnapshot(): void;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ export class RoomSessionManager implements IRoomSessionManager, IRoomHandlerList
|
||||
private _savedPosY: number = -1;
|
||||
private _activeRoomSessionSnapshot: Readonly<IRoomSessionSnapshot> | null = null;
|
||||
|
||||
private invalidateRoomSessionSnapshot(): void
|
||||
public invalidateRoomSessionSnapshot(): void
|
||||
{
|
||||
this._activeRoomSessionSnapshot = null;
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ export class RoomDataHandler extends BaseHandler
|
||||
roomSession.allowPets = roomData.allowPets;
|
||||
roomSession.moderationSettings = parser.moderation;
|
||||
|
||||
this.listener.invalidateRoomSessionSnapshot();
|
||||
|
||||
GetEventDispatcher().dispatchEvent(new RoomSessionPropertyUpdateEvent(RoomSessionPropertyUpdateEvent.RSDUE_ALLOW_PETS, roomSession));
|
||||
GetEventDispatcher().dispatchEvent(new RoomSessionEvent(RoomSessionEvent.ROOM_DATA, roomSession));
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ export class RoomPermissionsHandler extends BaseHandler
|
||||
if(!session) return;
|
||||
|
||||
session.setControllerLevel(event.getParser().controllerLevel);
|
||||
|
||||
this.listener.invalidateRoomSessionSnapshot();
|
||||
}
|
||||
|
||||
private onRoomRightsClearEvent(event: RoomRightsClearEvent): void
|
||||
@@ -33,6 +35,8 @@ export class RoomPermissionsHandler extends BaseHandler
|
||||
if(!session) return;
|
||||
|
||||
session.setControllerLevel(RoomControllerLevel.NONE);
|
||||
|
||||
this.listener.invalidateRoomSessionSnapshot();
|
||||
}
|
||||
|
||||
private onRoomRightsOwnerEvent(event: RoomRightsOwnerEvent): void
|
||||
@@ -44,5 +48,7 @@ export class RoomPermissionsHandler extends BaseHandler
|
||||
if(!session) return;
|
||||
|
||||
session.setRoomOwner();
|
||||
|
||||
this.listener.invalidateRoomSessionSnapshot();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user