UNPKG

tsdns

Version:

TeamSpeak™ 3 DNS (TSDNS) implementation for Node.js

85 lines (77 loc) 2 kB
import TSDNS from './'; import { connect } from 'net'; /** * Default timeout for a test request. * @type {Number} */ const TIMEOUT = 2000; /** * Send a test request. * @param {Number} port * @param {String} raw * @param {Number} timeout Optional. * @return {Promise} */ function sendRequest(port, raw, timeout = TIMEOUT) { return new Promise((resolve, reject) => { let socket = connect(port) .setEncoding('utf8') .setNoDelay(true) .setTimeout(timeout) .on('data', resolve) .on('error', reject) .on('connect', () => socket.write(raw)) .on('connect', () => console.log('REQ', raw)); }); } /** * Execute a test. * @param {Number} port * @param {String} request * @param {String|Boolean} expected * @return {Promise} */ function test(port, request, expected) { return sendRequest(port, request) .then((response) => new Promise((resolve, reject) => { if (response === expected) { resolve({ response, request, expected }); } else { reject({ response, request, expected }); } })) .catch((reason) => new Promise((resolve, reject) => { if (!expected) { resolve({ response: null, request, expected, reason }); } else { reject({ response: null, request, expected, reason }); } })); } /** * Create a new TSDNS instance. * @type {TSDNS} */ let tsdns = new TSDNS(); /** * Get the port. * @type {Number} */ let { port } = tsdns.address(); /** * Handle a request. */ tsdns.on('request', ({ host, port, raw, respond, remoteAddress, remotePort }) => { console.log('REQ', { host, port, raw, remoteAddress, remotePort }); respond('123.45.67.89', 9987); }); /** * Test request. */ test(port, 'veltro.de:9987', '123.45.67.89:9987') .then((result) => { console.log('SUCCESS', result); }) .catch((result) => { console.log('FAILURE', result); });