UNPKG

ive-connect

Version:

A universal haptic device control library for interactive experiences

94 lines (93 loc) 3.32 kB
/** * Device Manager * * Central manager for all haptic devices. * Handles unified script loading and distribution to devices. */ import { EventEmitter } from "./events"; import { HapticDevice, ScriptData, ScriptOptions, ScriptLoadResult, Funscript } from "./device-interface"; /** * Device Manager class * Handles registration and control of multiple haptic devices */ export declare class DeviceManager extends EventEmitter { private devices; private currentFunscript; private currentScriptOptions; /** * Register a device with the manager * @param device Device to register */ registerDevice(device: HapticDevice): void; /** * Unregister a device from the manager * @param deviceId Device ID to unregister */ unregisterDevice(deviceId: string): void; /** * Get all registered devices */ getDevices(): HapticDevice[]; /** * Get a specific device by ID * @param deviceId Device ID to retrieve */ getDevice(deviceId: string): HapticDevice | undefined; /** * Get the currently loaded funscript */ getCurrentFunscript(): Funscript | null; /** * Connect to all registered devices * @returns Object with success status for each device */ connectAll(): Promise<Record<string, boolean>>; /** * Disconnect from all registered devices * @returns Object with success status for each device */ disconnectAll(): Promise<Record<string, boolean>>; /** * Load a script - fetches, parses, and prepares on all connected devices * * This is the main entry point for loading scripts. It: * 1. Fetches and parses the script (once, centrally) * 2. Applies any transformations (inversion, sorting) * 3. Distributes to all connected devices * 4. Returns the funscript along with per-device results * * @param scriptData Script data to load (URL or content) * @param options Options for script loading (e.g., invertScript) * @returns ScriptLoadResult with funscript and per-device status */ loadScript(scriptData: ScriptData, options?: ScriptOptions): Promise<ScriptLoadResult>; /** * Start playback on all connected devices * @param timeMs Current time in milliseconds * @param playbackRate Playback rate (1.0 = normal speed) * @param loop Whether to loop the script * @returns Object with success status for each device */ playAll(timeMs: number, playbackRate?: number, loop?: boolean): Promise<Record<string, boolean>>; /** * Stop playback on all connected devices * @returns Object with success status for each device */ stopAll(): Promise<Record<string, boolean>>; /** * Synchronize time on all connected and playing devices * @param timeMs Current time in milliseconds * @param filter Time filter for synchronization * @returns Object with success status for each device */ syncTimeAll(timeMs: number, filter?: number): Promise<Record<string, boolean>>; /** * Clear the currently loaded script */ clearScript(): void; /** * Set up event forwarding from a device to the manager * @param device Device to forward events from */ private setupDeviceEventForwarding; }