好的,所以我试图将一些数据保存到我的config.json中,只是临时数据。
我正在使用一个名为Fivereborn-query的节点模块-用于从游戏服务器获取数据。
我想达到的目标是能够将data.hostname之前的数据保存到config.serverList [i] .serverName中,这是一个非常糟糕的问题。
不确定如何解决此问题,尝试进行一些搜索,但我找不到任何解决方案,我可能只是愚蠢,但有人可以指出我在此处的操作方向。
我的功能看起来像
function activity() {
setTimeout(() => {
for (i = 0; i < config.serverList.length; i++) {
fivereborn.query(config.serverList[i].serverIp, config.serverList[i].serverPort, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
}
activity();
}, 10000);
}
Config.json看起来像这样。
{
"serverList": [{
"discordChannel" : "",
"serverIp": "1.1.1.1",
"serverPort": "30121",
"serverName": "Server",
"serverMaxPlayers": "32",
"serverCurrentPlayers": "0"
},{
"discordChannel" : "",
"serverIp": "1.1.1.2",
"serverPort": "30122",
"serverName": "Server",
"serverMaxPlayers": "32",
"serverCurrentPlayers": "0"
}]
}
五个reborn查询代码如下
const dgram = require('dgram')
function parseData(buffer) {
const data = buffer.slice(18).toString('ascii').split('\\')
const server = {}
for (let i = 0; i < data.length; i += 2) {
if (data[i] == 'sv_maxclients') {
server['maxclients'] = Number(data[i + 1])
}
if (data[i] == 'clients') {
server['clients'] = Number(data[i + 1])
}
if (data[i] == 'challenge') {
server['challenge'] = data[i + 1]
}
if (data[i] == 'gamename') {
server['gamename'] = data[i + 1]
}
if (data[i] == 'protocol') {
server['protocol'] = Number(data[i + 1])
}
if (data[i] == 'hostname') {
server['hostname'] = data[i + 1].replace(/\^[0-9]/g, '')
}
if (data[i] == 'gametype') {
server['gametype'] = data[i + 1]
}
if (data[i] == 'mapname') {
server['mapname'] = data[i + 1]
}
if (data[i] == 'iv') {
server['iv'] = Number(data[i + 1])
}
}
return server
}
function queryServer(ip, port, callback) {
if (!ip || !port)
callback(true)
if (!callback)
return
const client = dgram.createSocket('udp4')
const req = Buffer.from('\xFF\xFF\xFF\xFFgetinfo xxx', 'ascii')
client.on('message', (message, remote) => {
callback(false, parseData(message))
client.close()
})
client.send(req, 0, req.length, port, ip, (err) => {
if (err) {
console.error(err)
callback(true)
}
})
}
module.exports.query = queryServer