UNPKG

htd-lync

Version:

This library is meant to be used to interact with an HTD Lync 12

99 lines (98 loc) 3.27 kB
import net from "net"; import { default as PromiseSocket } from "promise-socket"; import Parser, { Response_Code } from "./Parser.js"; import TypedEventEmitter from './TypedEventEmitter.js'; export default class Connector { host; port; client; ps; parser = new Parser(); connected = false; events; constructor(host, port) { this.host = host; this.port = port; this.client = new net.Socket(); this.ps = new PromiseSocket(this.client); this.events = new TypedEventEmitter(); this.client.on('error', (error) => { this.connected = false; this.events.emit('socket:error', error); }); this.client.on('close', () => { this.connected = false; }); this.client.on('data', (data) => { this.parser.parse(data).forEach((response) => { this.emit_response(response); }); }); } emit_response(response) { switch (response.type) { case Response_Code.Error: this.events.emit('error', response); break; case Response_Code.Id: this.events.emit('id', response); break; case Response_Code.System: this.events.emit('system', response); break; case Response_Code.Exist: this.events.emit('exist', response); break; case Response_Code.Status: this.events.emit('status', response); break; case Response_Code.Source_Name: this.events.emit('source_name', response); break; case Response_Code.Zone_Name: this.events.emit('zone_name', response); break; case Response_Code.MP3_Repeat: this.events.emit('mp3:repeat', response); break; case Response_Code.MP3_End: this.events.emit('mp3:end', response); break; case Response_Code.MP3_On: this.events.emit('mp3:on', response); break; case Response_Code.MP3_Off: this.events.emit('mp3:off', response); break; case Response_Code.MP3_File_Name: this.events.emit('mp3:file', response); break; case Response_Code.MP3_Artist_Name: this.events.emit('mp3:artist', response); break; case Response_Code.Firmware_V3: this.events.emit('firmware', response); break; } } async send_command(command) { await this.send_buffer(command.get_command()); } async send_buffer(buffer) { if (!this.connected) { await this.ps.connect(this.port, this.host); this.events.emit('socket:connected'); this.connected = true; } try { await this.ps.write(buffer); } catch (error) { this.events.emit('socket:error', error); } } disconnect() { this.client.destroy(); this.connected = false; } }