mirror of
https://github.com/unmojang/node-minecraft-protocol.git
synced 2025-09-29 06:03:33 -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 Client = require('./client');
|
||||||
var assert = require('assert');
|
var assert = require('assert');
|
||||||
|
|
||||||
@ -9,28 +7,12 @@ var compress = require('./client/compress');
|
|||||||
var caseCorrect = require('./client/caseCorrect');
|
var caseCorrect = require('./client/caseCorrect');
|
||||||
var setProtocol = require('./client/setProtocol');
|
var setProtocol = require('./client/setProtocol');
|
||||||
var play = require('./client/play');
|
var play = require('./client/play');
|
||||||
|
var tcp_dns = require('./client/tcp_dns');
|
||||||
|
|
||||||
module.exports=createClient;
|
module.exports=createClient;
|
||||||
|
|
||||||
function createClient(options) {
|
function createClient(options) {
|
||||||
assert.ok(options, "options is required");
|
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");
|
assert.ok(options.username, "username is required");
|
||||||
|
|
||||||
var optVersion = options.version || require("./version").defaultVersion;
|
var optVersion = options.version || require("./version").defaultVersion;
|
||||||
@ -41,6 +23,7 @@ function createClient(options) {
|
|||||||
|
|
||||||
var client = new Client(false, options.majorVersion);
|
var client = new Client(false, options.majorVersion);
|
||||||
|
|
||||||
|
tcp_dns(client, options);
|
||||||
setProtocol(client, options);
|
setProtocol(client, options);
|
||||||
keepalive(client, options);
|
keepalive(client, options);
|
||||||
encrypt(client);
|
encrypt(client);
|
||||||
|
20
src/ping.js
20
src/ping.js
@ -1,17 +1,20 @@
|
|||||||
var net = require('net');
|
var net = require('net');
|
||||||
var Client = require('./client');
|
var Client = require('./client');
|
||||||
var states = require("./states");
|
var states = require("./states");
|
||||||
|
var tcp_dns = require('./client/tcp_dns');
|
||||||
|
|
||||||
module.exports = ping;
|
module.exports = ping;
|
||||||
|
|
||||||
function ping(options, cb) {
|
function ping(options, cb) {
|
||||||
var host = options.host || 'localhost';
|
options.host = options.host || 'localhost';
|
||||||
var port = options.port || 25565;
|
options.port = options.port || 25565;
|
||||||
var optVersion = options.version || require("./version").defaultVersion;
|
var optVersion = options.version || require("./version").defaultVersion;
|
||||||
var mcData=require("minecraft-data")(optVersion);
|
var mcData=require("minecraft-data")(optVersion);
|
||||||
var version = mcData.version;
|
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) {
|
client.on('error', function(err) {
|
||||||
cb(err);
|
cb(err);
|
||||||
});
|
});
|
||||||
@ -32,16 +35,17 @@ function ping(options, cb) {
|
|||||||
client.write('ping_start', {});
|
client.write('ping_start', {});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// TODO: refactor with src/client/setProtocol.js
|
||||||
client.on('connect', function() {
|
client.on('connect', function() {
|
||||||
client.write('set_protocol', {
|
client.write('set_protocol', {
|
||||||
protocolVersion: version.version,
|
protocolVersion: options.protocolVersion,
|
||||||
serverHost: host,
|
serverHost: options.host,
|
||||||
serverPort: port,
|
serverPort: options.port,
|
||||||
nextState: 1
|
nextState: 1
|
||||||
});
|
});
|
||||||
client.state = states.STATUS;
|
client.state = states.STATUS;
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO: update
|
tcp_dns(client, options);
|
||||||
client.connect(port, host);
|
options.connect(client);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user