cleanned code and fix #18
This commit is contained in:
parent
68a4789afa
commit
c6498211fe
1 changed files with 53 additions and 31 deletions
84
traque.js
84
traque.js
|
@ -3,8 +3,12 @@
|
||||||
"id" : string,
|
"id" : string,
|
||||||
"pos" : [lat : float, long : float],
|
"pos" : [lat : float, long : float],
|
||||||
"color" : int,
|
"color" : int,
|
||||||
"rooms" : room list,
|
"state" : {
|
||||||
"shown" : bool
|
"shown" : bool,
|
||||||
|
"tracker" : bool,
|
||||||
|
"tracked" : bool,
|
||||||
|
"npc" : bool
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Les messages à transmettre par le client :
|
Les messages à transmettre par le client :
|
||||||
|
@ -64,6 +68,8 @@ var server = http.createServer(option, function(req, res){
|
||||||
//position logging
|
//position logging
|
||||||
console.log("team " + q.query.id + " moved to (" + q.query.lat + "," + q.query.lon + ")");
|
console.log("team " + q.query.id + " moved to (" + q.query.lat + "," + q.query.lon + ")");
|
||||||
|
|
||||||
|
if(!(q.query.id in equipes))
|
||||||
|
equipes[q.query.id] = default_team(q.query.id);
|
||||||
equipes[q.query.id].pos = [q.query.lat, q.query.lon];
|
equipes[q.query.id].pos = [q.query.lat, q.query.lon];
|
||||||
emit_update(q.query.id);
|
emit_update(q.query.id);
|
||||||
|
|
||||||
|
@ -93,7 +99,7 @@ var io = new Server(server);
|
||||||
// Everyone in this room is located
|
// Everyone in this room is located
|
||||||
// sub-rooms :
|
// sub-rooms :
|
||||||
// * "tracked" room for all tracked
|
// * "tracked" room for all tracked
|
||||||
// * "tracking" room for all tracker
|
// * "tracker" room for all tracker
|
||||||
// * "npc" room for non-player
|
// * "npc" room for non-player
|
||||||
// * "%ID" room of a team
|
// * "%ID" room of a team
|
||||||
//
|
//
|
||||||
|
@ -115,15 +121,49 @@ var tracking = io.to("Tracking");
|
||||||
// }
|
// }
|
||||||
var admin = io.to("Admin");
|
var admin = io.to("Admin");
|
||||||
|
|
||||||
|
// apparent information of a team, for other only
|
||||||
|
function apparent_info(equipe){
|
||||||
|
if(equipe.state.shown){
|
||||||
|
return {"id": equipe.id, "color": equipe.color, "position": equipe.pos};
|
||||||
|
} else {
|
||||||
|
return {"id": equipe.id, "color": equipe.color, "position": [0,0]};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function emit_update(team_id) {
|
function emit_update(team_id) {
|
||||||
var equipe = equipes[team_id];
|
var equipe = equipes[team_id];
|
||||||
if (equipe.shown){
|
tracking.except(team_id).emit('moving', apparent_info(equipe));
|
||||||
tracking.emit('moving', {"id": team_id, "color": equipe.color, "position": equipe.pos});
|
// the team and the admins always have the real informations
|
||||||
} else{
|
admin.to(team_id).emit('moving', {"id": team_id, "color": equipe.color, "position": equipe.pos});
|
||||||
tracking.expect(team_id).emit('moving', {"id": team_id, "color": equipe.color, "position": [0,0]});
|
}
|
||||||
io.to(team_id).emit('moving', {"id": team_id, "color": equipe.color, "position": equipe.pos});
|
|
||||||
}
|
// produces a team object populated with default values
|
||||||
admin.emit('moving', {"id": team_id, "color": equipe.color, "position": equipe.pos});
|
function default_team(team_id) {
|
||||||
|
var equipe = {};
|
||||||
|
var state = {};
|
||||||
|
state.shown = true;
|
||||||
|
state.tracker = false;
|
||||||
|
state.tracked = true;
|
||||||
|
state.npc = false;
|
||||||
|
equipe.state = state;
|
||||||
|
equipe.pos = [0,0];
|
||||||
|
equipe.color = 0;
|
||||||
|
equipe.id = team_id;
|
||||||
|
return equipe;
|
||||||
|
}
|
||||||
|
|
||||||
|
// connect a socket to the room corresponding to its team and send it infos
|
||||||
|
function team_join(team_id, socket){
|
||||||
|
socket.join(team_id);
|
||||||
|
var equipe = equipes[team_id]
|
||||||
|
var state = equipe.state;
|
||||||
|
if(state.tracker) socket.join("tracker");
|
||||||
|
if(state.tracked) socket.join("tracked");
|
||||||
|
if(state.npc) socket.join("npc");
|
||||||
|
socket.emit('moving', {"id": team_id, "color": equipe.color, "position": equipe.pos});
|
||||||
|
for(other_id in equipes)
|
||||||
|
if(other_id != team_id)
|
||||||
|
socket.emit('moving', apparent_info(equipes[other_id]));
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("Setup handlers");
|
console.log("Setup handlers");
|
||||||
|
@ -134,29 +174,11 @@ io.on('connection', function(socket){
|
||||||
console.log("connection of " + id + " !");
|
console.log("connection of " + id + " !");
|
||||||
|
|
||||||
socket.join("Tracking");
|
socket.join("Tracking");
|
||||||
socket.join(id);
|
if(!(id in equipes))
|
||||||
if(!(id in equipes)){
|
equipes[id] = default_team(id);
|
||||||
var equipe = {};
|
team_join(id, socket);
|
||||||
equipe.shown = true;
|
|
||||||
equipe.pos = [0,0];
|
|
||||||
equipe.color = 0;
|
|
||||||
equipe.id = id;
|
|
||||||
equipe.rooms = ["tracked"];
|
|
||||||
equipes[id] = equipe;
|
|
||||||
}
|
|
||||||
for(room of equipes[id].rooms)
|
|
||||||
socket.join(room);
|
|
||||||
|
|
||||||
socket.on("code", function(d){ /*TODO*/ });
|
socket.on("code", function(d){ /*TODO*/ });
|
||||||
|
|
||||||
for(i in equipes){
|
|
||||||
var equipe = equipes[i];
|
|
||||||
if (equipe.shown){
|
|
||||||
socket.emit('moving', {"id": equipe.id, "color": equipe.color, "position": equipe.pos});
|
|
||||||
} else{
|
|
||||||
socket.emit('moving', {"id": equipe.id, "color": equipe.color, "position": [0,0]});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(socket.handshake.auth.type == "vieux"){
|
if(socket.handshake.auth.type == "vieux"){
|
||||||
|
|
Loading…
Reference in a new issue