UNPKG

@harmonyhub/discover

Version:

Discover available Logitech Harmony Hubs in the current network.

70 lines (54 loc) 1.46 kB
import autobind from 'autobind-decorator'; import * as logger from 'debug'; const debug = logger('harmonyhub:discover:responsecollector'); import { EventEmitter } from 'events'; import * as net from 'net'; @autobind export class ResponseCollector extends EventEmitter { port: number; server: net.Server; /** * @param port Port number on this client to use for the tcp server. */ constructor(port: number) { super(); debug(`Be aware that port ${port} needs to be reachable on your machine in order to discover harmony hubs.`); debug(`ResponseCollector(${port})`); this.port = port; } /** * Setup a tcp server to listen for hub messages and emit a * response when the message is done. */ start(): void { debug('start()'); this.server = net.createServer((socket) => { debug('handle new connection'); let buffer = ''; socket.on('data', (data) => { debug('received data chunk'); buffer += data.toString(); }); socket.on('end', () => { debug('connection closed. emitting data.'); this.emit(ResponseCollector.Events.RESPONSE, buffer); }); }).listen(this.port); } /** * Close the tcp server. */ stop() { debug('stop()'); if (this.server) { this.server.close(); } else { debug('not running'); } } } export namespace ResponseCollector { export enum Events { RESPONSE = 'response' } }