diff --git a/src/client/tcp_dns.js b/src/client/tcp_dns.js new file mode 100644 index 0000000..4ef5696 --- /dev/null +++ b/src/client/tcp_dns.js @@ -0,0 +1,21 @@ +var net = require('net'); +var dns = require('dns'); + +module.exports = function(client, options) { + options.port = options.port || 25565; + options.host = options.host || 'localhost'; + + options.connect = (client) => { + if(options.port == 25565 && net.isIP(host) === 0) { + dns.resolveSrv("_minecraft._tcp." + options.host, function(err, addresses) { + if(addresses && addresses.length > 0) { + client.setSocket(net.connect(addresses[0].port, addresses[0].name)); + } else { + client.setSocket(net.connect(options.port, options.host)); + } + }); + } else { + client.setSocket(net.connect(options.port, options.host)); + } + }; +}; diff --git a/src/createClient.js b/src/createClient.js index 201124b..528e417 100644 --- a/src/createClient.js +++ b/src/createClient.js @@ -1,5 +1,3 @@ -var net = require('net'); -var dns = require('dns'); var Client = require('./client'); var assert = require('assert'); @@ -9,28 +7,12 @@ var compress = require('./client/compress'); var caseCorrect = require('./client/caseCorrect'); var setProtocol = require('./client/setProtocol'); var play = require('./client/play'); +var tcp_dns = require('./client/tcp_dns'); module.exports=createClient; function createClient(options) { assert.ok(options, "options is required"); - options.port = options.port || 25565; - options.host = options.host || 'localhost'; - - options.connect = (client) => { - if(options.port == 25565 && net.isIP(host) === 0) { - dns.resolveSrv("_minecraft._tcp." + options.host, function(err, addresses) { - if(addresses && addresses.length > 0) { - client.setSocket(net.connect(addresses[0].port, addresses[0].name)); - } else { - client.setSocket(net.connect(options.port, options.host)); - } - }); - } else { - client.setSocket(net.connect(options.port, options.host)); - } - }; - assert.ok(options.username, "username is required"); var optVersion = options.version || require("./version").defaultVersion; @@ -41,6 +23,7 @@ function createClient(options) { var client = new Client(false, options.majorVersion); + tcp_dns(client, options); setProtocol(client, options); keepalive(client, options); encrypt(client); diff --git a/src/ping.js b/src/ping.js index c61bd8f..4a58353 100644 --- a/src/ping.js +++ b/src/ping.js @@ -1,17 +1,20 @@ var net = require('net'); var Client = require('./client'); var states = require("./states"); +var tcp_dns = require('./client/tcp_dns'); module.exports = ping; function ping(options, cb) { - var host = options.host || 'localhost'; - var port = options.port || 25565; + options.host = options.host || 'localhost'; + options.port = options.port || 25565; var optVersion = options.version || require("./version").defaultVersion; var mcData=require("minecraft-data")(optVersion); var version = mcData.version; + options.majorVersion = version.majorVersion; + options.protocolVersion = version.version; - var client = new Client(false,version.majorVersion); + var client = new Client(false,options.majorVersion); client.on('error', function(err) { cb(err); }); @@ -32,16 +35,17 @@ function ping(options, cb) { client.write('ping_start', {}); }); + // TODO: refactor with src/client/setProtocol.js client.on('connect', function() { client.write('set_protocol', { - protocolVersion: version.version, - serverHost: host, - serverPort: port, + protocolVersion: options.protocolVersion, + serverHost: options.host, + serverPort: options.port, nextState: 1 }); client.state = states.STATUS; }); - // TODO: update - client.connect(port, host); + tcp_dns(client, options); + options.connect(client); }