data-channel-router
Version:
Data channel router
86 lines (85 loc) • 3.34 kB
TypeScript
import { DataChannelSignalQuality, DataChannelStatuses } from "../enums";
import { DataChannelRouterEvents } from "../enums/DataChannelRouterEvents";
import { IDataChannelInfo, IDataChannelOptions, IDataChannelRouterOptions, IDataChannelsStats } from "../interfaces";
import { Id } from "../types";
import { EventEmitter } from "../utils";
import { DataChannelProxy } from "./DataChannelProxy";
type Events = typeof DataChannelRouterEvents.CHANNEL_CHANGE | typeof DataChannelRouterEvents.CHANNEL_UNAVAILABLE | typeof DataChannelRouterEvents.CHANNEL_RECOVERY | typeof DataChannelRouterEvents.PING_FAILURE | typeof DataChannelRouterEvents.ROUTE_ERROR | typeof DataChannelRouterEvents.CHANGE | typeof DataChannelRouterEvents.STATS | typeof DataChannelRouterEvents.BUFFERING;
type OnChannelChangeListener = (channel: IDataChannelInfo) => void;
type OnChannelUnavailableListener = (channel: IDataChannelInfo) => void;
type OnChannelRecoveryListener = (channel: IDataChannelInfo) => void;
type OnChangeListener = (channel: IDataChannelInfo | null) => void;
type OnPingFailureListener = (channelId: Id) => void;
type OnRouteErrorListener = (routeName: string, channelId: Id) => void;
type OnStatsListener = (stats: IDataChannelsStats) => void;
type OnBufferingListener = (bufferSize: number) => void;
type Listeners = OnChannelChangeListener | OnChannelUnavailableListener | OnChannelRecoveryListener | OnChangeListener | OnPingFailureListener | OnRouteErrorListener | OnStatsListener | OnBufferingListener;
/**
* Data channel router
* @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/components/DataChannelRouter.ts
* @author Evgenii Grebennikov
* @email djonnyx@gmail.com
*/
export declare class DataChannelRouter<R = any> extends EventEmitter<Events, Listeners> {
private _channelsByPriority;
private _pingThreadManager;
private _routeThreadManager;
/**
* Returns true if there are data channels available.
*/
get isAvailable(): boolean;
private _router;
/**
* Router
*/
get router(): R;
private _stats;
/**
* Returns statistics for data channels
*/
get stats(): {
[channelId: number]: {
status: DataChannelStatuses;
signal: DataChannelSignalQuality;
};
[channelId: string]: {
status: DataChannelStatuses;
signal: DataChannelSignalQuality;
};
};
/**
* Returns the buffering value
*/
get buffering(): number;
private _pingTimeout;
private _pingTimeouts;
private _activeChannel;
/**
* @internal
*/
get activeChannel(): DataChannelProxy;
private _delayMap;
private _onChannelConnectedHandler;
private _onChannelIdleHandler;
private _onChannelUnavailableHandler;
private _onRouteThreadManagerBuffering;
constructor(options: IDataChannelRouterOptions<R>);
private createInitialChannels;
private run;
/**
* Adds a new data channel
*/
add(channel: IDataChannelOptions): void;
private changeDataChannel;
private generateStats;
private addChannelToMap;
private pingChannel;
private ping;
private storeChannel;
private selectFastestChannel;
/**
* Clears all data. Called before deletion.
*/
dispose(): void;
}
export {};