Debug monitoring
[qomet.git] / sockets.js
index 2ce8ae9..9c230be 100644 (file)
@@ -1,23 +1,20 @@
 const message = require("./public/javascripts/utils/socketMessages");
 const params = require("./config/parameters");
+const AssessmentEntity = require("./entities/assessment");
 const AssessmentModel = require("./models/assessment");
 const ObjectId = require("bson-objectid");
 
 module.exports = function(io)
 {
-       io.of("/").on("connection", socket => {
+       io.of("/").on("connection", socket => { //student or monitor connexion
                const aid = socket.handshake.query.aid;
-               socket.join(aid);
-               // Student or monitor connexion
                const isTeacher = !!socket.handshake.query.secret && socket.handshake.query.secret == params.secret;
 
                if (isTeacher)
                {
-                       socket.on(message.newAnswer, m => { //got answer from student
-                               socket.emit(message.newAnswer, m);
-                       });
+                       socket.join(aid + "_teacher");
                        socket.on(message.allAnswers, m => { //send feedback to student (answers)
-                               socket.broadcast.to(aid).emit(message.allAnswers, m);
+                               socket.broadcast.to(aid + "_student").emit(message.allAnswers, m);
                        });
                }
                else //student
@@ -27,9 +24,15 @@ module.exports = function(io)
                        AssessmentModel.checkPassword(ObjectId(aid), number, password, (err,ret) => {
                                if (!!err || !ret)
                                        return; //wrong password, or some unexpected error...
-                               socket.on("disconnect", () => {
-                                       //TODO: notify monitor (grey low opacity background)
-                                       //Also send to server: discoTime in assessment.papers ...
+                               AssessmentModel.newConnection(ObjectId(aid), number);
+                               socket.broadcast.to(aid + "_teacher").emit(message.studentConnect, {number: number});
+                               socket.join(aid + "_student");
+                               socket.on(message.newAnswer, m => { //got answer from student client
+                                       socket.broadcast.to(aid + "_teacher").emit(message.newAnswer, m);
+                               });
+                               socket.on("disconnect", () => { //notify monitor + server
+                                       AssessmentEntity.setDiscoTime(ObjectId(aid), number);
+                                       socket.broadcast.to(aid + "_teacher").emit(message.studentDisconnect, {number: number});
                                });
                        });
                }