ive-connect
Version:
A universal haptic device control library for interactive experiences
94 lines (93 loc) • 3.32 kB
TypeScript
/**
* 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;
}