Bonjour à tous,

je voudrais mettre en place un panel d'administration pour un serveur de jeu mais j'ai un peu de mal a voir comment je peux l’implémenter.

J'ai pour l'instant un module dans nodejs qui récupère les infos du server via le serveur query de steam.

Je pensais utiliser le système de routage de NodeJs (express) ex : www.domain.xyz/serverinfo qui exécuterait mon script et renverrait la réponse au format JSON ce json serait alors utiliser au niveau du script du navigateur via une requête ajax.

Comment puis-je modifier mon script pour qu'il renvoie sa réponse lorsqu'il a terminer de récupérer les données ?

Si vous avez des conseils n'hésiter pas

Merci d'avance.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
};