Attempt to resurrect qomet code - need some rewrite
[qomet.git] / sockets.js
index 2ce8ae9..dafe6d9 100644 (file)
@@ -1,35 +1,49 @@
 const message = require("./public/javascripts/utils/socketMessages");
 const params = require("./config/parameters");
-const AssessmentModel = require("./models/assessment");
+const EvaluationModel = require("./models/evaluation");
 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
                {
                        const number = socket.handshake.query.number;
                        const password = socket.handshake.query.password;
-                       AssessmentModel.checkPassword(ObjectId(aid), number, password, (err,ret) => {
+                       EvaluationModel.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 ...
+                               EvaluationModel.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(message.studentBlur, m => {
+                                       socket.broadcast.to(aid + "_teacher").emit(message.studentBlur, m);
+                               });
+                               socket.on(message.studentFocus, m => {
+                                       socket.broadcast.to(aid + "_teacher").emit(message.studentFocus, m);
+                               });
+                               socket.on(message.studentResize, m => {
+                                       socket.broadcast.to(aid + "_teacher").emit(message.studentResize, m);
+                               });
+                               socket.on(message.studentFullscreen, m => {
+                                       socket.broadcast.to(aid + "_teacher").emit(message.studentFullscreen, m);
+                               });
+                               socket.on("disconnect", () => { //notify monitor + server
+                                       EvaluationModel.setDiscoTime(ObjectId(aid), number);
+                                       socket.broadcast.to(aid + "_teacher").emit(message.studentDisconnect, {number: number});
                                });
                        });
                }