Compare commits

...

3 Commits

Author SHA1 Message Date
inotflying 8bebab258b fix(types): type names 2023-12-08 15:41:24 +04:00
Egornya d4176df6c7
feat(types): `PingOptions` for Java 2023-12-08 15:36:53 +04:00
Egornya da92b62ccd
feat(pingJava): add `protocolVersion` 2023-12-08 15:26:10 +04:00
3 changed files with 18 additions and 10 deletions

View File

@ -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);
}); });
} }

View File

@ -2,7 +2,7 @@
* @param port The server port. * @param port The server port.
* @param timeout The read/write socket timeout. * @param timeout The read/write socket timeout.
*/ */
export type PingOptions = { export type BedrockPingOptions = {
port: number, port: number,
timeout: number; timeout: number;
}; };

11
types/lib/java.d.ts vendored
View File

@ -1,4 +1,13 @@
import { PingOptions } from "./bedrock"; /**
* @param port The server port.
* @param timeout The read/write socket timeout.
* @param protocolVersion The protocol version.
*/
export type JavaPingOptions = {
port: number,
timeout: number,
protocolVersion: number;
};
/** /**
* JSON format chat component used for description field. * JSON format chat component used for description field.