homebridge-denon-heos-audio
Version:
Control your Denon speakers via AVR Control and/or HeosCLI
61 lines • 2.3 kB
JavaScript
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