axis-discovery-ssdp
Version:
A Node.js SSDP (UPnP) client library written in TypeScript capable of searching for Axis Communication cameras.
66 lines • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MSearchSocket = void 0;
const logging_1 = require("../logging");
const Constants_1 = require("./Constants");
const Message_1 = require("./Message");
const MSearch_1 = require("./MSearch");
const SocketBase_1 = require("./SocketBase");
/**
* Class representing a SSDP socket that support the HTTP method M-SEARCH.
*/
class MSearchSocket extends SocketBase_1.SocketBase {
/**
* Initializes a new instance of the class.
* @param address The network address to listen for M-SEARCH responses on.
*/
constructor(address) {
super();
this.address = address;
}
/**
* Starts a search by using HTTP method M-SEARCH.
*/
search() {
(0, logging_1.log)('MSearchSocket#search - %s', this.address);
const message = new MSearch_1.MSearch().toBuffer();
return new Promise((resolve, reject) => {
if (!this.socket) {
reject(new Error('Socket has never been started'));
return;
}
this.socket.send(message, 0, message.length, Constants_1.SSDP_PORT, Constants_1.SSDP_MULTICAST_ADDRESS, (error) => {
if (error) {
(0, logging_1.log)('MSearchSocket#search - %o', error);
reject(error);
}
else {
resolve();
}
});
});
}
onListening() {
if (!this.socket) {
throw new Error('M-SEARCH socket has never been started');
}
(0, logging_1.log)('MSearchSocket#onListening - %s:%d', this.socket.address().address, this.socket.address().port);
}
onMessage(messageBuffer, remote) {
const message = new Message_1.Message(remote.address, messageBuffer);
if (message.method !== 'HTTP/1.1 200 OK') {
return;
}
this.emit('hello', message);
}
bind() {
return new Promise((resolve) => {
if (!this.socket) {
throw new Error('M-SEARCH socket has never been started');
}
this.socket.bind(undefined, this.address, () => resolve());
});
}
}
exports.MSearchSocket = MSearchSocket;
//# sourceMappingURL=MSearchSocket.js.map