import { VisData, RemoteSimulator } from "../simularium/index.js"; import type { NetConnectionParams, TrajectoryFileInfo } from "../simularium/index.js"; import { VisGeometry } from "../visGeometry/index.js"; import { FileReturn, PlotConfig } from "../simularium/types.js"; import { IClientSimulatorImpl } from "../simularium/localSimulators/IClientSimulatorImpl.js"; import { ISimulator } from "../simularium/ISimulator.js"; import { FrontEndError } from "../simularium/FrontEndError.js"; import type { ISimulariumFile } from "../simularium/ISimulariumFile.js"; import { WebsocketClient } from "../simularium/WebsocketClient.js"; import { TrajectoryType } from "../constants.js"; import { RemoteMetricsCalculator } from "../simularium/RemoteMetricsCalculator.js"; import { OctopusServicesClient } from "../simularium/OctopusClient.js"; interface SimulariumControllerParams { remoteSimulator?: RemoteSimulator; netConnectionSettings?: NetConnectionParams; trajectoryPlaybackFile?: string; } interface SimulatorConnectionParams { netConnectionSettings?: NetConnectionParams; clientSimulator?: IClientSimulatorImpl; simulariumFile?: ISimulariumFile; geoAssets?: { [key: string]: string; }; requestJson?: boolean; } export default class SimulariumController { simulator?: ISimulator; remoteWebsocketClient?: WebsocketClient; octopusClient?: OctopusServicesClient; metricsCalculator?: RemoteMetricsCalculator; visData: VisData; visGeometry: VisGeometry | undefined; tickIntervalLength: number; handleTrajectoryInfo: (TrajectoryFileInfo: any) => void; postConnect: () => void; startRecording: () => void; stopRecording: () => void; onError?: (error: FrontEndError) => void; private isPaused; private isFileChanging; private playBackFile; constructor(params: SimulariumControllerParams); private createSimulatorConnection; configureNetwork(config: NetConnectionParams): void; isRemoteOctopusClientConfigured(): boolean; get isChangingFile(): boolean; connect(): Promise; start(): Promise; time(): number; stop(): void; sendUpdate(obj: Record): void; convertTrajectory(netConnectionConfig: NetConnectionParams, dataToConvert: Record, fileType: TrajectoryType, providedFileName?: string): Promise; pause(): void; paused(): boolean; initializeTrajectoryFile(): void; startSmoldynSim(netConnectionConfig: NetConnectionParams, fileName: string, smoldynInput: string): Promise; gotoTime(time: number): void; playFromTime(time: number): void; resume(): void; clearFile(): void; handleFileChange(simulariumFile: ISimulariumFile, fileName: string, geoAssets?: { [key: string]: string; }): Promise; cancelCurrentFile(newFileName: string): void; initNewFile(connectionParams: SimulatorConnectionParams, keepRemoteConnection?: boolean): Promise; changeFile(connectionParams: SimulatorConnectionParams, newFileName: string, keepRemoteConnection?: boolean): Promise; markFileChangeAsHandled(): void; getFile(): string; checkServerHealth(handler: () => void, netConnectionConfig: NetConnectionParams): void; cancelConversion(): void; private setupMetricsCalculator; getMetrics(config: NetConnectionParams): Promise; getPlotData(config: NetConnectionParams, requestedPlots: PlotConfig[]): Promise; clearLocalCache(): void; set trajFileInfoCallback(callback: (msg: TrajectoryFileInfo) => void); /** * Camera controls * simulariumController.visGeometry gets set in * componentDidMount of the viewer, so as long as the dom is mounted * these functions will be callable. */ zoomIn(): void; zoomOut(): void; resetCamera(): void; centerCamera(): void; reOrientCamera(): void; setPanningMode(pan: boolean): void; setAllowViewPanning(allow: boolean): void; setFocusMode(focus: boolean): void; setCameraType(ortho: boolean): void; } export { SimulariumController };