UNPKG

rock-mod

Version:

Rock-Mod is a powerful framework designed for creating and managing mods for Grand Theft Auto (GTA) games.

44 lines (43 loc) 1.9 kB
import { ClientInternalEventName } from "../../common/events/types"; /** * Реализация `IDataHandler` под CCMP поверх `rm::syncedMetaChange`. * * `CCMPSyncedMetaBridge` переводит нативное событие * `ccmp.on('streamSyncedMetaChange')` в internal-bus * `rm::syncedMetaChange(entity, key, value, oldValue)`. Этот класс * держит per-key реестр колбэков и диспатчит на них пришедшие изменения. * * Снапшот всех ключей сущности (отправляется CCMP'ом сразу после * `StreamIn`) тоже проходит через это событие — поэтому первое появление * сущности у клиента триггерит колбэк на каждый уже выставленный сервером * ключ (с `oldValue === undefined`). */ export class CCMPDataHandler { constructor(events) { this._handlers = new Map(); events.onInternal({ [ClientInternalEventName.SyncedMetaChange]: (object, key, value, oldValue) => { const callbacks = this._handlers.get(key); if (!callbacks || callbacks.length === 0) { return; } for (const callback of [...callbacks]) { try { callback(object, value, oldValue); } catch (error) { console.error(`[CCMPDataHandler] callback for key "${key}" failed:`, error); } } }, }); } addDataHandler(key, callback) { let bucket = this._handlers.get(key); if (!bucket) { bucket = []; this._handlers.set(key, bucket); } bucket.push(callback); } }