import type { ConnectionController } from '../ConnectionController'; import type { IncomingMessage } from '../../messages/IncomingMessage'; import type { OutgoingMessage } from '../../messages/OutgoingMessage'; import type { BinaryMessage } from '../../messages/BinaryMessage'; export abstract class Connection { public headers!: Record; private connectionController!: ConnectionController; public setConnectionController(cc: ConnectionController) { this.connectionController = cc; } public abstract reply(message: OutgoingMessage): Promise; public abstract send(message: OutgoingMessage): Promise; public abstract getSocket(): any; public abstract close(data?: string): Promise; public getStore(): Record { const socket = this.getSocket() as any; if (!socket.boogerSessionUserStore) { socket.boogerSessionUserStore = {}; } return socket.boogerSessionUserStore; } protected async onMessage(message: IncomingMessage): Promise { await this.connectionController.onMessage(message); } protected async onBinaryMessage(message: BinaryMessage): Promise { await this.connectionController.onBinaryMessage(message); } protected async onClose() { await this.connectionController.onClose(); } }