import type { Client } from '../Client'; import type { IncomingMessage, OutgoingMessage } from '../../messages'; import { ClientAdapterConfig } from './ClientAdapterConfig'; export abstract class ClientAdapter implements ClientAdapterConfig { public autoReconnect = true; public maxAutoReconnectTry = Infinity; public client?: Client; protected constructor(cfg: Partial = {}) { Object.assign(this, cfg); } public setClient(client: Client) { this.client = client; } public getClient() { if (!this.client) { throw new Error('Client is undefined.'); } return this.client; } // eslint-disable-next-line @typescript-eslint/no-unused-vars public async beforeSend(message: IncomingMessage): Promise { // ... } public abstract send(message: IncomingMessage): Promise; public abstract sendBinary(message: BinaryData): Promise; public abstract getUrl(): string; abstract close(): void; protected onMessage(message: OutgoingMessage) { this.getClient().getMessageDispatcher().onMessage(message); } }