UNPKG

homebridge-denon-heos-audio

Version:

Control your Denon speakers via AVR Control and/or HeosCLI

61 lines 2.3 kB
import * as net from "net"; import { DenonClientAvrControl } from "./denonClientAvrControl.js"; import { DenonClientHeosCli } from "./denonClientHeosCli.js"; import { DenonClientHybrid } from "./denonClientHybrid.js"; export var ControlMode; (function (ControlMode) { ControlMode[ControlMode["AVRCONTROL"] = 23] = "AVRCONTROL"; ControlMode[ControlMode["HEOSCLI"] = 1255] = "HEOSCLI"; ControlMode[ControlMode["HYBRID"] = -1] = "HYBRID"; })(ControlMode || (ControlMode = {})); export const CLIENT_MAP = { [ControlMode.AVRCONTROL]: DenonClientAvrControl, [ControlMode.HEOSCLI]: DenonClientHeosCli, [ControlMode.HYBRID]: DenonClientHybrid, }; function checkProtocolSupportAtPort(host, port, debugLogCallback) { return new Promise((resolve) => { const socket = net.createConnection({ host: host, port: port, timeout: 5000 }, () => { resolve(true); if (debugLogCallback) { debugLogCallback("successfully connected to", host, port); } socket.end(); }); socket.on("error", (error) => { resolve(false); if (debugLogCallback) { debugLogCallback("error for", host, port, error.message); } socket.end(); }); socket.on("timeout", () => { resolve(false); if (debugLogCallback) { debugLogCallback("timeout for", host, port); } socket.end(); }); setTimeout(() => { if (!socket.destroyed) { if (debugLogCallback) { debugLogCallback("destroying the socket", host, port); } socket.destroy(); } }, 10000); }); } export async function checkProtocolSupport(host, debugLogCallback) { const supportedProtocols = []; for (const controlMode of Object.values(ControlMode).filter((value) => typeof value === "number")) { if (controlMode >= 0) { const supported = await checkProtocolSupportAtPort(host, controlMode, debugLogCallback); if (supported) { supportedProtocols.push(controlMode); } } } return supportedProtocols; } //# sourceMappingURL=denonProtocol.js.map