1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
var dgram = require('dgram');
var fs = require('fs');
var serverArray;
var buffer = new Buffer([0xff,0xff,0xff,0xff,0x54,0x53,0x6f,0x75,0x72,0x63,0x65,0x20,0x45,0x6e,0x67,0x69,0x6e,0x65,0x20,0x51,0x75,0x65,0x72,0x79,0x00]); // A2S_INFO Query
//Lecture de ma liste de serveur
function readJson(){
fs.readFile('server.json', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
else{
var json = JSON.parse(data);
serverArray = new Array(json.length);
for (var k =0 ; k < json.length ; k++){
new aQuery(json[k][0],json[k][1],k); // Genere une query pour chaque serveur
};
}
});
}
var server = function (){
this.servername;
this.map;
this.folder;
this.game;
this.idserver;
this.player;
this.maxplayer;
this.bots;
this.serverType;
this.environment;
this.visibity;
this.vac;
this.serverversion;
this.serverport;
return this;
}
var aQuery = function(dIp, dPort, dId){
var socket = dgram.createSocket("udp4");
var timerout = "";
socket.on('message',function (message, remote){
console.log("Receiving ...");
clearTimeout(timerout);
var json = message.toJSON()
parseInfo(json['data'],dId);
socket.close();
});
socket.send(buffer,0,buffer.length,dPort,dIp,function(err){
timerout = setTimeout(function() {socket.close();console.log("TimeOut exceeded");}, 2000); // Création d'un timeout au cas ou le serveur n'est pas joignable
});
function parseInfo(data, did){
var srv = new server();
getProtocol(data);
srv.servername = getString(data);
srv.map = getString(data);
srv.folder = getString(data);
srv.game = getString(data);
srv.idserver = getShort(data);
srv.player = getByte(data);
srv.maxplayer = getByte(data);
srv.bots = getByte(data);
srv.serverType = getServerType(data);
srv.environment = getEnv(data);
srv.visibity = getVisibility(data);
srv.vac = getIsSecured(data);
srv.serverversion = getString(data);
data.shift();
srv.serverport = getShort(data);
serverArray[did] = srv;
}
// Fonctions de parsing des données
function getProtocol(mes){
for (var i = 1; i <= 6; i++) {
mes.shift();
};
}
function getString(mes){
var output="";
while(mes[0] != '0')
{
output += String.fromCharCode(mes.shift());
}
mes.shift();
return output;
}
function getByte(mes){
var output="";
output += mes.shift();
return output;
}
function getShort(mes){
var output=0;
var buffer = new Buffer(2);
buffer[0] = mes.shift();
buffer[1] = mes.shift();
output = buffer.readInt16LE(0);
return output;
}
function getServerType(mes){
var serverType = "";
var type = getByte(mes);
if(type == 100) {
serverType = "Dedicaced";
}
return serverType;
}
function getEnv(mes){
var environment = "";
var byte = getByte(mes);
if (byte == 108){
environment = "Linux";
}
return environment;
}
function getVisibility(mes) {
return (getByte(mes)==0) ? "Public" : "Private";
}
function getIsSecured(mes) {
return (getByte(mes)==0) ? "Unsecure" : "Secure";
}
}
//Fonction d'appel pour ma route
exports.getServerInfo = function () {
readJson();
return serverArray;
}; |
Partager