import { Nullable } from '@mlytics/core-ts/core/type/basic'; import { Channel, ChannelHub } from '@mlytics/core-ts/core/util/future'; import { AbstractDaemon, SpecDaemon } from '../../../base/daemon/daemon'; import { SwarmInfo, SwarmUser } from '../../base/swarm'; import { AbstractProcessAgent } from './process/base/agent'; import { AbstractProcessPipe, ProcessPipeContent, ProcessPipeOutcome } from './process/base/pipe'; interface SpecSwarmDaemon extends SpecDaemon { info: SwarmInfo; command(command: SwarmDaemonCommandOptions): Promise>; } declare abstract class AbstractSwarmDaemon extends AbstractDaemon implements SpecSwarmDaemon { protected readonly _options: SwarmDaemonOptions; protected _info: SwarmInfo; protected _agent: AbstractProcessAgent; protected _commands: Channel>; protected _submissions: ChannelHub; constructor(_options: SwarmDaemonOptions); get info(): SwarmInfo; command(command: SwarmDaemonCommandOptions): Promise>; protected _buildWaitToStartTask(): Promise; protected _execWaitToStartTaskCallee(): Promise; protected _buildJoinSwarmTask(): Promise; protected _execJoinSwarmTaskCallee(): Promise; protected _execJoinSwarmTaskOnFinish(): Promise; protected _buildReportSwarmStatsTask(): Promise; protected _execReportSwarmStatsCallee(): Promise; protected _buildObtainSwarmUsersTask(): Promise; protected _execObtainSwarmUsersCallee(): Promise; protected get _shouldObtainSwarmUsers(): boolean; protected _buildConnectSwarmUsersTask(): Promise; protected _execConnectSwarmUsersCallee(): Promise; protected get _shouldConnectSwarmUser(): boolean; protected get _nextCandidateSwarmUser(): Nullable; protected _buildReportResourceStatsTask(): Promise; protected _execReportResourceStatsCallee(): Promise; protected get _shouldReportResourceStats(): boolean; protected _buildProcessCommandTask(): Promise; protected _execProcessCommandTaskCallee(): Promise; protected _buildExitProcessTask(): Promise; protected _execExitProcessTaskOnClose(): Promise; } type SwarmDaemonOptions = { info: SwarmInfo; }; declare class SwarmDaemonEvent { static readonly CONNECTED = "connected"; static readonly DISCONNECTED = "disconnected"; } declare class SwarmDaemonTaskName { static readonly WAIT_TO_START = "swarm daemon: wait to start"; static readonly JOIN_SWARM = "swarm daemon: join swarm"; static readonly REPORT_SWARM_STATS = "swarm daemon: report swarm stats"; static readonly OBTAIN_SWARM_USERS = "swarm daemon: obtain swarm users"; static readonly CONNECT_SWARM_USERS = "swarm daemon: connect swarm users"; static readonly REPORT_RESOURCE_STATS = "swarm daemon: report resource stats"; static readonly PROCESS_COMMAND = "swarm daemon: process command"; static readonly EXIT_PROCESS = "swarm daemon: exit process"; } type SwarmDaemonCommandOptions = { id: string; name: string; content?: ProcessPipeContent; }; export { SpecSwarmDaemon, AbstractSwarmDaemon, SwarmDaemonOptions, SwarmDaemonEvent, SwarmDaemonTaskName };