///
import { Connection, ConnectionOptions } from '../cmap/connection';
import { CancellationToken, TypedEventEmitter } from '../mongo_types';
import type { InterruptibleAsyncInterval } from '../utils';
import { EventEmitterWithState } from '../utils';
import { ServerHeartbeatFailedEvent, ServerHeartbeatStartedEvent, ServerHeartbeatSucceededEvent } from './events';
import { Server } from './server';
/** @internal */
declare const kServer: unique symbol;
/** @internal */
declare const kMonitorId: unique symbol;
/** @internal */
declare const kConnection: unique symbol;
/** @internal */
declare const kCancellationToken: unique symbol;
/** @internal */
declare const kRTTPinger: unique symbol;
/** @internal */
declare const kRoundTripTime: unique symbol;
/** @internal */
export interface MonitorPrivate {
state: string;
}
/** @public */
export interface MonitorOptions extends Omit {
connectTimeoutMS: number;
heartbeatFrequencyMS: number;
minHeartbeatFrequencyMS: number;
}
/** @public */
export declare type MonitorEvents = {
serverHeartbeatStarted(event: ServerHeartbeatStartedEvent): void;
serverHeartbeatSucceeded(event: ServerHeartbeatSucceededEvent): void;
serverHeartbeatFailed(event: ServerHeartbeatFailedEvent): void;
resetServer(error?: Error): void;
resetConnectionPool(): void;
close(): void;
} & EventEmitterWithState;
/** @internal */
export declare class Monitor extends TypedEventEmitter {
/** @internal */
s: MonitorPrivate;
address: string;
options: Readonly>;
connectOptions: ConnectionOptions;
[kServer]: Server;
[kConnection]?: Connection;
[kCancellationToken]: CancellationToken;
/** @internal */
[kMonitorId]?: InterruptibleAsyncInterval;
[kRTTPinger]?: RTTPinger;
get connection(): Connection | undefined;
constructor(server: Server, options: MonitorOptions);
connect(): void;
requestCheck(): void;
reset(): void;
close(): void;
}
/** @internal */
export interface RTTPingerOptions extends ConnectionOptions {
heartbeatFrequencyMS: number;
}
/** @internal */
export declare class RTTPinger {
/** @internal */
[kConnection]?: Connection;
/** @internal */
[kCancellationToken]: CancellationToken;
/** @internal */
[kRoundTripTime]: number;
/** @internal */
[kMonitorId]: NodeJS.Timeout;
closed: boolean;
constructor(cancellationToken: CancellationToken, options: RTTPingerOptions);
get roundTripTime(): number;
close(): void;
}
export {};
//# sourceMappingURL=monitor.d.ts.map