Noob NodeJS质疑如何从Node Module获取数据

时间:2019-10-20 16:10:47

标签: javascript node.js json

好的,所以我试图将一些数据保存到我的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

0 个答案:

没有答案