X-Git-Url: https://git.auder.net/?p=qomet.git;a=blobdiff_plain;f=sockets.js;h=1719f9ab629fa77792f924d6c2ce96b2d8d6c2d6;hp=38a9929bcca78ec4c43b3f567384f4ab5f6d1781;hb=e5ec7dead171feebb299430f298e3930864e096d;hpb=6bf4a38e1a82fdcdf1d2742a3e8937b26fe2e873 diff --git a/sockets.js b/sockets.js index 38a9929..1719f9a 100644 --- a/sockets.js +++ b/sockets.js @@ -1,25 +1,27 @@ -var message = require("./public/javascripts/utils/socketMessages.js"); +const message = require("./public/javascripts/utils/socketMessages"); const params = require("./config/parameters"); +const AssessmentEntity = require("./entities/assessment"); +const ObjectId = require("bson-objectid"); // TODO: when teacher connect on monitor, io.of("appropriate namespace").on(connect student) { ... } // --> 2 sockets on monitoring page: one with ns "/" et one dedicated to the exam, triggered after the first // --> The monitoring page should not be closed during exam (otherwise monitors won't receive any more data) -function quizzRoom(socket) { +function examRoom(socket) { let students = { }; + const aid = ObjectId(socket.handshake.query.aid); // Student or monitor stuff const isTeacher = !!socket.handshake.query.secret && socket.handshake.query.secret == params.secret; if (isTeacher) { - // TODO: on student disconnect, too socket.on(message.newAnswer, m => { //got answer from student socket.emit(message.newAnswer, m); }); - socket.on(message.socketFeedback, m => { //send feedback to student (answers) - if (!!students[m.number]) - socket.broadcast.to(students[m.number]).emit(message.newFeedback, { feedback:m.feedback }); + socket.on(message.allAnswers, m => { //send feedback to student (answers) + if (!!students[m.number]) //TODO: namespace here... room quiz + socket.broadcast.to(students[m.number]).emit(message.allAnswers, m); }); socket.on("disconnect", m => { // Reset student array if no more active teacher connections (TODO: condition) @@ -31,17 +33,25 @@ function quizzRoom(socket) { { const number = socket.handshake.query.number; const password = socket.handshake.query.password; - // Prevent socket connection (just ignore) if student already connected - if (!!students[number] && students[number].password != password) - return; - students[number] = { - sid: socket.id, - password: password, - }; - socket.on(message.newFeedback, () => { //got feedback from teacher - socket.emit(message.newFeedback, m); + AssessmentEntity.checkPassword(aid, number, password, (err,ret) => { + if (!!err || !ret) + return; //wrong password, or some unexpected error... + // Prevent socket connection (just ignore) if student already connected + if (!!students[number]) + return; + students[number] = { + sid: socket.id, + password: password, + }; + socket.on(message.allAnswers, () => { //got all answers from teacher + socket.emit(message.allAnswers, m); + }); + socket.on("disconnect", () => { + // .. + //TODO: notify monitor (highlight red), redirect + }); + // NOTE: nothing on disconnect --> teacher disconnect trigger students cleaning }); - // NOTE: nothing on disconnect --> teacher disconnect trigger students cleaning } }