@harmonyhub/discover
Version:
Discover available Logitech Harmony Hubs in the current network.
70 lines (54 loc) • 1.46 kB
text/typescript
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';
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'
}
}