ggejs
Version:
A powerful JavaScript library for interacting with the server of Goodgame Empire: Four Kingdoms
39 lines (37 loc) • 1.47 kB
JavaScript
const _maxMS = 3600000;
const timeout = 1;
/**
* Resolves when socket[field] is true, returning value of socket[field].
* Rejects when socket[errorField] !== ""
* @param {Socket} socket
* @param {string} field
* @param {string} errorField
* @param {number} maxMs
*/
module.exports.WaitUntil = function (socket, field, errorField = "", maxMs = _maxMS) {
return _WaitUntil(socket, field, errorField, new Date(Date.now() + maxMs).getTime());
}
/**
* Resolves when socket[field] is true. Rejects when socket[errorField] !== ""
* @param {Socket} socket
* @param {string} field
* @param {string} errorField
* @param {number} endDateTimestamp
* @private
*/
async function _WaitUntil(socket, field, errorField = "", endDateTimestamp) {
if (socket?._host == null) {
throw `WaitUntil: Socket missing! field: ${field}, errorField: ${errorField}`;
} else if (socket[field]) {
return socket[field];
} else if (errorField !== "" && socket[errorField] && socket[errorField] !== "") {
throw socket[errorField];
} else if ((socket["__disconnecting"] && field !== "__disconnect") || socket.closed) {
throw "Socket disconnected!";
} else if (endDateTimestamp < Date.now()) {
throw "Exceeded max time!";
} else {
await new Promise(resolve => setTimeout(resolve, timeout));
return await _WaitUntil(socket, field, errorField, endDateTimestamp);
}
}