/** * This module provides a Deno specific implementation of a TCP socket listener * it uses the platform agnostic MqttServer class * @module */ import { MqttServer } from "../server/mod.ts"; import type { MqttServerOptions } from "../server/mod.ts"; import { denoConnToNext } from "./denoConnToNext.ts"; /** * TLS server that wraps a MqttServer, see the /examples folder */ export class TlsServer { /** the MqttServer instance used by the server */ readonly mqttServer: MqttServer; private listener: Deno.TlsListener; /** * Create a new TLS server */ constructor( serverOptions: Deno.ListenTlsOptions & Deno.TlsCertifiedKeyPem, mqttOptions: MqttServerOptions | MqttServer, ) { this.listener = Deno.listenTls(serverOptions); if (mqttOptions instanceof MqttServer) { this.mqttServer = mqttOptions; } else { this.mqttServer = new MqttServer(mqttOptions); } } /** * Start listening */ async start(): Promise { for await (const conn of this.listener) { this.mqttServer.serve(denoConnToNext(conn)); } } /** * Stop listening */ async stop(opts = { closeMqtt: true }): Promise { if (opts.closeMqtt) { await this.mqttServer.close(); } this.listener.close(); } /** * The port number the server is listening on */ // deno-coverage-ignore-start get port(): number | undefined { return this.listener.addr.port; } /** * The address the server is listening on */ get address(): string | undefined { return this.listener.addr.hostname; } // deno-coverage-ignore-stop }