Replace deprecated substr with substring (#355)
* Make the QueryRunner more readable * Remove use of deprecated substr and replace with substring, and some formatting
This commit is contained in:
parent
65dd876252
commit
5b01e1be17
|
@ -16,5 +16,5 @@ let start = readme.indexOf(marker_top);
|
|||
start += marker_top.length;
|
||||
const end = readme.indexOf(marker_bottom);
|
||||
|
||||
const updated = readme.substr(0,start)+"\n\n"+generated+"\n"+readme.substr(end);
|
||||
const updated = readme.substring(0,start)+"\n\n"+generated+"\n"+readme.substring(end);
|
||||
fs.writeFileSync(readmeFilename, updated);
|
||||
|
|
|
@ -9,16 +9,20 @@ class GameResolver {
|
|||
}
|
||||
|
||||
lookup(type) {
|
||||
if(!type) throw Error('No game specified');
|
||||
if(!type)
|
||||
throw Error('No game specified');
|
||||
|
||||
if(type.substr(0,9) === 'protocol-') {
|
||||
if(type.substring(0,9) === 'protocol-') {
|
||||
return {
|
||||
protocol: type.substr(9)
|
||||
protocol: type.substring(9)
|
||||
};
|
||||
}
|
||||
|
||||
const game = this.gamesByKey.get(type);
|
||||
if(!game) throw Error('Invalid game: '+type);
|
||||
|
||||
if(!game)
|
||||
throw Error('Invalid game: '+type);
|
||||
|
||||
return game.options;
|
||||
}
|
||||
|
||||
|
@ -61,7 +65,7 @@ class GameResolver {
|
|||
for (let line of lines) {
|
||||
// strip comments
|
||||
const comment = line.indexOf('#');
|
||||
if(comment !== -1) line = line.substr(0,comment);
|
||||
if(comment !== -1) line = line.substring(0,comment);
|
||||
line = line.trim();
|
||||
if(!line) continue;
|
||||
|
||||
|
@ -82,27 +86,34 @@ class GameResolver {
|
|||
for (const key of keys) {
|
||||
gamesByKey.set(key, game);
|
||||
}
|
||||
|
||||
games.push(game);
|
||||
}
|
||||
return { gamesByKey, games };
|
||||
}
|
||||
|
||||
_parseList(str) {
|
||||
if(!str) return {};
|
||||
const out = {};
|
||||
if(!str)
|
||||
return {};
|
||||
|
||||
let out = {};
|
||||
for (const one of str.split(',')) {
|
||||
const equals = one.indexOf('=');
|
||||
const key = equals === -1 ? one : one.substr(0,equals);
|
||||
const key = equals === -1 ? one : one.substring(0, equals);
|
||||
|
||||
/** @type {string|number|boolean} */
|
||||
let value = equals === -1 ? '' : one.substr(equals+1);
|
||||
let value = equals === -1 ? '' : one.substring(equals + 1);
|
||||
|
||||
if(value === 'true' || value === '') value = true;
|
||||
else if(value === 'false') value = false;
|
||||
else if(!isNaN(parseInt(value))) value = parseInt(value);
|
||||
if(value === 'true' || value === '')
|
||||
value = true;
|
||||
else if(value === 'false')
|
||||
value = false;
|
||||
else if(!isNaN(parseInt(value)))
|
||||
value = parseInt(value);
|
||||
|
||||
out[key] = value;
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,8 +26,8 @@ class GlobalUdpSocket {
|
|||
log(fromAddress + ':' + fromPort + " <--UDP(" + this.port + ")");
|
||||
log(HexUtil.debugDump(buffer));
|
||||
});
|
||||
for (const cb of this.callbacks) {
|
||||
cb(fromAddress, fromPort, buffer);
|
||||
for (const callback of this.callbacks) {
|
||||
callback(fromAddress, fromPort, buffer);
|
||||
}
|
||||
});
|
||||
udpSocket.on('error', e => {
|
||||
|
@ -42,12 +42,14 @@ class GlobalUdpSocket {
|
|||
|
||||
async send(buffer, address, port, debug) {
|
||||
const socket = await this._getSocket();
|
||||
|
||||
if (debug) {
|
||||
this.logger._print(log => {
|
||||
log(address + ':' + port + " UDP(" + this.port + ")-->");
|
||||
log(HexUtil.debugDump(buffer));
|
||||
});
|
||||
}
|
||||
|
||||
await util.promisify(socket.send).bind(socket)(buffer,0,buffer.length,port,address);
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ class QueryRunner {
|
|||
this.gameResolver = new GameResolver();
|
||||
this.protocolResolver = new ProtocolResolver();
|
||||
}
|
||||
|
||||
async run(userOptions) {
|
||||
for (const key of Object.keys(userOptions)) {
|
||||
const value = userOptions[key];
|
||||
|
@ -30,51 +31,38 @@ class QueryRunner {
|
|||
port_query_offset: gameQueryPortOffset,
|
||||
...gameOptions
|
||||
} = this.gameResolver.lookup(userOptions.type);
|
||||
const attempts = [];
|
||||
let attempts = [];
|
||||
|
||||
const optionsCollection = {
|
||||
...defaultOptions,
|
||||
...gameOptions,
|
||||
...userOptions
|
||||
};
|
||||
|
||||
const addAttemptWithPort = port => {
|
||||
attempts.push({
|
||||
...optionsCollection,
|
||||
port
|
||||
});
|
||||
}
|
||||
|
||||
if (userOptions.port) {
|
||||
if (gameQueryPortOffset && !userOptions.givenPortOnly) {
|
||||
attempts.push({
|
||||
...defaultOptions,
|
||||
...gameOptions,
|
||||
...userOptions,
|
||||
port: userOptions.port + gameQueryPortOffset
|
||||
});
|
||||
if(!userOptions.givenPortOnly) {
|
||||
if (gameQueryPortOffset)
|
||||
addAttemptWithPort(userOptions.port + gameQueryPortOffset);
|
||||
|
||||
if (userOptions.port === gameOptions.port && gameQueryPort)
|
||||
addAttemptWithPort(gameQueryPort);
|
||||
}
|
||||
if (userOptions.port === gameOptions.port && gameQueryPort && !userOptions.givenPortOnly) {
|
||||
attempts.push({
|
||||
...defaultOptions,
|
||||
...gameOptions,
|
||||
...userOptions,
|
||||
port: gameQueryPort
|
||||
});
|
||||
}
|
||||
attempts.push({
|
||||
...defaultOptions,
|
||||
...gameOptions,
|
||||
...userOptions
|
||||
});
|
||||
|
||||
attempts.push(optionsCollection);
|
||||
} else if (gameQueryPort) {
|
||||
attempts.push({
|
||||
...defaultOptions,
|
||||
...gameOptions,
|
||||
...userOptions,
|
||||
port: gameQueryPort
|
||||
});
|
||||
addAttemptWithPort(gameQueryPort);
|
||||
} else if (gameOptions.port) {
|
||||
attempts.push({
|
||||
...defaultOptions,
|
||||
...gameOptions,
|
||||
...userOptions,
|
||||
port: gameOptions.port + (gameQueryPortOffset || 0)
|
||||
});
|
||||
addAttemptWithPort(gameOptions.port + (gameQueryPortOffset || 0));
|
||||
} else {
|
||||
// Hopefully the request doesn't need a port. If it does, it'll fail when making the request.
|
||||
attempts.push({
|
||||
...defaultOptions,
|
||||
...gameOptions,
|
||||
...userOptions
|
||||
});
|
||||
attempts.push(optionsCollection);
|
||||
}
|
||||
|
||||
const numRetries = userOptions.maxAttempts || gameOptions.maxAttempts || defaultOptions.maxAttempts;
|
||||
|
@ -97,6 +85,7 @@ class QueryRunner {
|
|||
for (const e of errors) {
|
||||
err.stack += '\n' + e.stack;
|
||||
}
|
||||
|
||||
throw err;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,9 +12,12 @@ class Gamedig {
|
|||
}
|
||||
|
||||
static getInstance() {
|
||||
if (!singleton) singleton = new Gamedig();
|
||||
if (!singleton)
|
||||
singleton = new Gamedig();
|
||||
|
||||
return singleton;
|
||||
}
|
||||
|
||||
static async query(...args) {
|
||||
return await Gamedig.getInstance().query(...args);
|
||||
}
|
||||
|
|
|
@ -14,8 +14,8 @@ class Teamspeak2 extends Core {
|
|||
const data = await this.sendCommand(socket, 'si');
|
||||
for (const line of data.split('\r\n')) {
|
||||
const equals = line.indexOf('=');
|
||||
const key = equals === -1 ? line : line.substr(0,equals);
|
||||
const value = equals === -1 ? '' : line.substr(equals+1);
|
||||
const key = equals === -1 ? line : line.substring(0,equals);
|
||||
const value = equals === -1 ? '' : line.substring(equals+1);
|
||||
state.raw[key] = value;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -53,8 +53,8 @@ class Teamspeak3 extends Core {
|
|||
const unit = {};
|
||||
for (const field of split) {
|
||||
const equals = field.indexOf('=');
|
||||
const key = equals === -1 ? field : field.substr(0,equals);
|
||||
const value = equals === -1 ? '' : field.substr(equals+1)
|
||||
const key = equals === -1 ? field : field.substring(0, equals);
|
||||
const value = equals === -1 ? '' : field.substring(equals + 1)
|
||||
.replace(/\\s/g,' ').replace(/\\\//g,'/');
|
||||
unit[key] = value;
|
||||
}
|
||||
|
|
|
@ -133,7 +133,7 @@ class Tribes1 extends Core {
|
|||
if (!str) return [];
|
||||
return ('?'+str)
|
||||
.split('\t')
|
||||
.map((a) => a.substr(1).trim().toLowerCase())
|
||||
.map((a) => a.substring(1).trim().toLowerCase())
|
||||
.map((a) => a === 'team name' ? 'name' : a)
|
||||
.map((a) => a === 'player name' ? 'name' : a);
|
||||
}
|
||||
|
|
|
@ -64,9 +64,9 @@ function splitFields(str,subMode) {
|
|||
}
|
||||
for (const one of split) {
|
||||
const equal = one.indexOf(splitter);
|
||||
const key = equal === -1 ? one : one.substr(0,equal);
|
||||
const key = equal === -1 ? one : one.substring(0,equal);
|
||||
if(!key || key === '\0') continue;
|
||||
const value = equal === -1 ? '' : one.substr(equal+splitter.length);
|
||||
const value = equal === -1 ? '' : one.substring(equal+splitter.length);
|
||||
if(!subMode && key === 'CHANNEL') out.CHANNELS.push(splitFields(value,true));
|
||||
else if(!subMode && key === 'CLIENT') out.CLIENTS.push(splitFields(value,true));
|
||||
else out[key] = value;
|
||||
|
|
Loading…
Reference in New Issue