UNPKG

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
"use strict"; 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