mirror of
https://github.com/minescope/mineping.git
synced 2025-07-14 08:04:35 +03:00
refactoring and comments
fix(cli.js): refactor help and error handling logic for better readability and maintainability feat(cli.js): add support for custom port and timeout options fix(parallel.js): update list of hosts to ping fix(bedrock.js): add comments and improve error handling in ping function fix(java.js): add comments and improve error handling in ping function fix(varint.js): add comments to functions and improve readability fix(index.d.ts): export all functions from java.js and bedrock.js fix(lib/bedrock.d.ts): update source link fix(lib/java.d.ts): update source link
This commit is contained in:
25
lib/java.js
25
lib/java.js
@ -10,6 +10,13 @@ import varint from './varint.js';
|
||||
|
||||
const PROTOCOL_VERSION = 0;
|
||||
|
||||
/**
|
||||
* Ping a Minecraft Java server.
|
||||
* @param {string} host The host 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 {number} [timeout=5000] The timeout duration in milliseconds.
|
||||
*/
|
||||
function ping(host, port = 25565, cb, timeout = 5000) {
|
||||
const socket = net.createConnection(({ host, port }));
|
||||
|
||||
@ -29,6 +36,10 @@ function ping(host, port = 25565, cb, timeout = 5000) {
|
||||
// This is mostly dangerous since it can swallow errors
|
||||
let didFireError = false;
|
||||
|
||||
/**
|
||||
* Handle any error that occurs during the ping process.
|
||||
* @param {Error} err The error that occurred.
|
||||
*/
|
||||
const handleError = (err) => {
|
||||
closeSocket();
|
||||
|
||||
@ -65,6 +76,7 @@ function ping(host, port = 25565, cb, timeout = 5000) {
|
||||
|
||||
socket.on('data', (data) => {
|
||||
incomingBuffer = Buffer.concat([incomingBuffer, data]);
|
||||
|
||||
// Wait until incomingBuffer is at least 5 bytes long to ensure it has captured the first VarInt value
|
||||
// This value is used to determine the full read length of the response
|
||||
// "VarInts are never longer than 5 bytes"
|
||||
@ -84,16 +96,15 @@ function ping(host, port = 25565, cb, timeout = 5000) {
|
||||
const packetId = varint.decodeInt(incomingBuffer, varint.decodeLength(packetLength));
|
||||
|
||||
if (packetId === 0) {
|
||||
const data = incomingBuffer.slice(varint.decodeLength(packetLength) + varint.decodeLength(packetId));
|
||||
const data = incomingBuffer.subarray(varint.decodeLength(packetLength) + varint.decodeLength(packetId));
|
||||
const responseLength = varint.decodeInt(data, 0);
|
||||
const response = data.slice(varint.decodeLength(responseLength), varint.decodeLength(responseLength) + responseLength);
|
||||
const response = data.subarray(varint.decodeLength(responseLength), varint.decodeLength(responseLength) + responseLength);
|
||||
|
||||
try {
|
||||
const message = JSON.parse(response);
|
||||
cb(null, message);
|
||||
|
||||
// Close the socket and clear the timeout task
|
||||
closeSocket();
|
||||
cb(message, null);
|
||||
} catch (err) {
|
||||
handleError(err);
|
||||
}
|
||||
@ -107,12 +118,10 @@ function ping(host, port = 25565, cb, timeout = 5000) {
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @param {string} host The Java server address.
|
||||
* @param {import('../types/index.js').PingOptions} options The configuration for pinging Minecraft Java server.
|
||||
* @returns {Promise<import('../types/lib/java.js').JavaPingResponse>}
|
||||
* @returns {Promise<import('../types/index.js').JavaPingResponse>}
|
||||
*/
|
||||
export function pingJava(host, options = {}) {
|
||||
if (!host) throw new Error('Host argument is not provided');
|
||||
@ -120,7 +129,7 @@ export function pingJava(host, options = {}) {
|
||||
const { port = 25565, timeout = 5000 } = options;
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
ping(host, port, (err, res) => {
|
||||
ping(host, port, (res, err) => {
|
||||
err ? reject(err) : resolve(res);
|
||||
}, timeout);
|
||||
});
|
||||
|
Reference in New Issue
Block a user