mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-09-28 13:45:37 -04:00
Move net.socket() and dns.resolveSrv() into client/net_tcp
This has been the trickest to refactor/remodularize, since it used to modify the Client prototype to augument connect(host, port). This added a dependence on TCP/IP host/port socketpairs, refactor to add a 'connect' option instead, called with the client instance. Update ping accordingly, but it has to call connect itself since it does not include client/caseCorrect, which normally calls connect. Still may be able to improve further and untangle these interdependencies cleanlier.
This commit is contained in:
parent
de36de8496
commit
fe327c85e1
21
src/client/tcp_dns.js
Normal file
21
src/client/tcp_dns.js
Normal file
@ -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));
|
||||
}
|
||||
};
|
||||
};
|
@ -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);
|
||||
|
20
src/ping.js
20
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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user