formations/cesi/architecture_n_tiers/ressources/exercices/ex_2_tiers_solution/server.js

103 lines
2.3 KiB
JavaScript

var net = require('net');
var HOST = '127.0.0.1'; // On écoute sur toutes les interfaces
var PORT = 3333;
var server = net.createServer();
server.on('connection', onClientConnection);
server.on('listening', onListening);
server.on('error', onError);
server.listen(PORT, HOST);
function onClientConnection(client) {
var accumulator = 0;
console.log('Nouveau client depuis %s:%s', client.remoteAddress, client.remotePort);
// On souhaite commencer à récupérer les données
// provenant de ce nouveau client
client.on('data', onClientData);
client.on('close', onClientClose);
function onClientData(data) {
console.log('Données reçues de %s:%s: "%s"', client.remoteAddress, client.remotePort, data);
var messages = data.toString('utf8').split('\n');
for(var i = 0; i < messages.length; i++) {
var line = messages[i];
var tokens = line.split(' ');
if (tokens.length !== 1 && tokens.length !== 2) {
client.write('invalid message');
continue
}
var command = tokens[0];
var arg;
if (tokens.length === 2) {
try {
arg = parseFloat(tokens[1]);
} catch(err) {
client.write('invalid message\n');
continue
}
}
console.log("Tokens", tokens);
switch(command) {
case "add":
accumulator = accumulator + arg;
client.write(accumulator+'\n');
break;
case "sub":
accumulator = accumulator - arg;
client.write(accumulator+'\n');
break;
case "div":
accumulator = accumulator / arg;
client.write(accumulator+'\n');
break;
case "mul":
accumulator = accumulator * arg;
client.write(accumulator+'\n');
break;
case "status":
client.write(accumulator+'\n');
break;
case "reset":
accumulator = 0;
client.write(accumulator+'\n');
break;
}
}
}
function onClientClose() {
console.log('Le client %s:%s s\'est déconnecté.', client.remoteAddress, client.remotePort);
}
}
function onListening() {
console.log("Serveur en écoute sur %s:%s", HOST, PORT)
}
function onError(err) {
console.log('Une erreur a été soulevée: %s', err);
process.exit(1);
}