|
|
@ -8,16 +8,15 @@
|
|
|
|
import net from 'net';
|
|
|
|
import net from 'net';
|
|
|
|
import varint from './varint.js';
|
|
|
|
import varint from './varint.js';
|
|
|
|
|
|
|
|
|
|
|
|
const PROTOCOL_VERSION = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Ping a Minecraft Java server.
|
|
|
|
* Ping a Minecraft Java server.
|
|
|
|
* @param {string} host The host of the Java server.
|
|
|
|
* @param {string} host The host of the Java server.
|
|
|
|
* @param {number} [port=25565] The port of the Java server.
|
|
|
|
* @param {number} [port=25565] The port of the Java server.
|
|
|
|
* @param {function} cb The callback function to handle the ping response.
|
|
|
|
* @param {function} cb The callback function to handle the ping response.
|
|
|
|
* @param {number} [timeout=5000] The timeout duration in milliseconds.
|
|
|
|
* @param {number} [timeout=5000] The timeout duration in milliseconds.
|
|
|
|
|
|
|
|
* @param {number} [protocolVersion=0] The protocol version of the Java client.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
function ping(host, port = 25565, cb, timeout = 5000) {
|
|
|
|
function ping(host, port = 25565, cb, timeout = 5000, protocolVersion = 0) {
|
|
|
|
const socket = net.createConnection(({ host, port }));
|
|
|
|
const socket = net.createConnection(({ host, port }));
|
|
|
|
|
|
|
|
|
|
|
|
// Set manual timeout interval.
|
|
|
|
// Set manual timeout interval.
|
|
|
@ -56,7 +55,7 @@ function ping(host, port = 25565, cb, timeout = 5000) {
|
|
|
|
socket.on('connect', () => {
|
|
|
|
socket.on('connect', () => {
|
|
|
|
const handshake = varint.concat([
|
|
|
|
const handshake = varint.concat([
|
|
|
|
varint.encodeInt(0),
|
|
|
|
varint.encodeInt(0),
|
|
|
|
varint.encodeInt(PROTOCOL_VERSION),
|
|
|
|
varint.encodeInt(protocolVersion),
|
|
|
|
varint.encodeInt(host.length),
|
|
|
|
varint.encodeInt(host.length),
|
|
|
|
varint.encodeString(host),
|
|
|
|
varint.encodeString(host),
|
|
|
|
varint.encodeUShort(port),
|
|
|
|
varint.encodeUShort(port),
|
|
|
@ -118,7 +117,7 @@ function ping(host, port = 25565, cb, timeout = 5000) {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Asynchronously ping Minecraft Java server.
|
|
|
|
* Asynchronously ping Minecraft Java server.
|
|
|
|
* The optional `options` argument can be an object with a `ping` (default is `25565`) or/and `timeout` (default is `5000`) property.
|
|
|
|
* The optional `options` argument can be an object with a `port` (default is `25565`) or/and `timeout` (default is `5000`) or/and `protocolVersion` (default is `0`) property.
|
|
|
|
* @param {string} host The Java server address.
|
|
|
|
* @param {string} host The Java server address.
|
|
|
|
* @param {import('../types/index.js').PingOptions} options The configuration for pinging Minecraft Java server.
|
|
|
|
* @param {import('../types/index.js').PingOptions} options The configuration for pinging Minecraft Java server.
|
|
|
|
* @returns {Promise<import('../types/index.js').JavaPingResponse>}
|
|
|
|
* @returns {Promise<import('../types/index.js').JavaPingResponse>}
|
|
|
@ -126,11 +125,11 @@ function ping(host, port = 25565, cb, timeout = 5000) {
|
|
|
|
export function pingJava(host, options = {}) {
|
|
|
|
export function pingJava(host, options = {}) {
|
|
|
|
if (!host) throw new Error('Host argument is not provided');
|
|
|
|
if (!host) throw new Error('Host argument is not provided');
|
|
|
|
|
|
|
|
|
|
|
|
const { port = 25565, timeout = 5000 } = options;
|
|
|
|
const { port = 25565, timeout = 5000, protocolVersion = 0 } = options;
|
|
|
|
|
|
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
ping(host, port, (res, err) => {
|
|
|
|
ping(host, port, (res, err) => {
|
|
|
|
err ? reject(err) : resolve(res);
|
|
|
|
err ? reject(err) : resolve(res);
|
|
|
|
}, timeout);
|
|
|
|
}, timeout, protocolVersion);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|