Fixed hostname resolver and added comments and errors

This commit is contained in:
lluiscab 2018-08-24 10:00:47 +02:00
parent 3a4a3ee8e8
commit 5ebbd3a493

View File

@ -2,30 +2,59 @@ const net = require('net')
const dns = require('dns')
module.exports = function (client, options) {
// Default options
options.port = options.port || 25565
options.host = options.host || 'localhost'
if (!options.connect) {
options.connect = (client) => {
// Use stream if provided
if (options.stream) {
client.setSocket(options.stream)
client.emit('connect')
} else if (options.port === 25565 && net.isIP(options.host) === 0 && options.host !== 'localhost') {
dns.resolveSrv('_minecraft._tcp.' + options.host, function (err, addresses) {
return;
}
// If port was not defined (defauls to 25565), host is not an ip neither localhost
if (options.port === 25565 && net.isIP(options.host) === 0 && options.host !== 'localhost') {
// Try to resolve SRV records for the comain
dns.resolveSrv('_minecraft._tcp.' + options.host, (err, addresses) => {
// Error resolving domain
if (err) {
client.setSocket(net.connect(options.port, options.host))
return;
// Could not resolve SRV lookup, connect directly
if(err.code === 'ENODATA') {
client.setSocket(net.connect(options.port, options.host))
return;
} else {
// Something else happened
return client.emit('error', err)
}
}
// SRV Lookup resolved conrrectly
if (addresses && addresses.length > 0) {
client.setSocket(net.connect(addresses[0].port, addresses[0].name))
return;
} else {
client.emit('error', new Error("Could not resolve hostname"));
}
client.emit('error', 'Could not resolve server address');
})
} else {
// Otherwise, just connect using the provided hostname and port
client.setSocket(net.connect(options.port, options.host))
}
}
}
}