issue #872 fixed

parent 3916a007
...@@ -1174,28 +1174,20 @@ module.exports = { ...@@ -1174,28 +1174,20 @@ module.exports = {
}, },
// //
// Unsubscribe to websockets events // Unsubscribe from websockets events
// //
unsubscribe: function (req, res) { unsubscribe: function (req, res) {
var action = req.param('action'); var action = req.param('action');
//var attributes = req.param('attributes'); var attributes = req.param('attributes');
attributes.ui = attributes.ui ? attributes.ui : 'PCB';
if (req.isSocket) { if (req.isSocket) {
sails.hooks.rooms.unsubscribeFromRoom(
var rooms = sails.sockets.socketRooms(req.socket); sails.hooks.rooms.student(attributes.id_stu),
console.log("Subscribed rooms in socket: " + JSON.stringify(rooms)); req.socket
);
// Leave all rooms
for (var i = 0; i < rooms.length; i++) {
//sails.sockets.leave(req.socket, rooms[i]); MODIFICADO POR FERNANDO. SI NO, NO SE ACTUALIZA UPDATE_PEERS
sails.hooks.rooms.unsubscribeFromRoom(rooms[i], req.socket);
sails.log.debug("Unsusbscribe from room " + rooms[i]);
}
res.json({
msg: "Unsubscribed from all rooms"
});
} }
res.ok({ msg: "Unsubscribed from student's rooms"});
}, },
// //
......
...@@ -7,10 +7,8 @@ ...@@ -7,10 +7,8 @@
* to obtain an ID. * to obtain an ID.
* @type {Object} * @type {Object}
*/ */
var socketRooms={}; // {socketId => [roomId, ...]} var socketRooms = {}; // {socketId => [roomId, ...]}
var pcb_count=0; var roomPeers = {}; // {roomId: {pcb_count, pdb_count}}
var pdb_count=0;
module.exports = function roomsHook (sails) { module.exports = function roomsHook (sails) {
return { return {
...@@ -57,21 +55,31 @@ module.exports = function roomsHook (sails) { ...@@ -57,21 +55,31 @@ module.exports = function roomsHook (sails) {
var socket_id = sails.sockets.getId(socket); var socket_id = sails.sockets.getId(socket);
// append to socketRooms // append to socketRooms
if (!socketRooms[socket_id]) if (!socketRooms[socket_id])
socketRooms[socket_id] = [{room: room, ui: ui}]; socketRooms[socket_id] = [{room: room, ui: ui}];
else else
socketRooms[socket_id].push({room: room, ui: ui}); socketRooms[socket_id].push({room: room, ui: ui});
if (ui == 'PCB') // append/updated room peer counters
pcb_count++;
if (ui == 'PDB') if (!roomPeers[room]) {
pdb_count++; roomPeers[room] = {
pcb_count: ui == 'PCB' ? 1 : 0,
pdb_count: ui == 'PDB' ? 1 : 0
};
} else {
roomPeers[room].pcb_count += ui == 'PCB' ? 1 : 0;
roomPeers[room].pdb_count += ui == 'PDB' ? 1 : 0;
}
// broadcast data // broadcast data
sails.hooks.events.broadcastEvent( sails.hooks.events.broadcastEvent(
room, room,
sails.hooks.events.roomSubscribersChange({'pdb_count': pcb_count, 'pcb_count': pdb_count}) sails.hooks.events.roomSubscribersChange({
'room': room,
'pdb_count': roomPeers[room].pdb_count,
'pcb_count': roomPeers[room].pcb_count
})
); );
} }
}); });
...@@ -106,17 +114,29 @@ module.exports = function roomsHook (sails) { ...@@ -106,17 +114,29 @@ module.exports = function roomsHook (sails) {
var index = socketRooms[sails.sockets.getId(socket)].findIndex(x => x.room == room); var index = socketRooms[sails.sockets.getId(socket)].findIndex(x => x.room == room);
if (index > -1) { if (index > -1) {
// Update room counters
if (socketRooms[sails.sockets.getId(socket)][index].ui == 'PDB') if (socketRooms[sails.sockets.getId(socket)][index].ui == 'PDB')
pdb_count--; roomPeers[room].pdb_count--;
else if (socketRooms[sails.sockets.getId(socket)][index].ui == 'PCB')
pcb_count--; roomPeers[room].pcb_count--;
var pcb_count = roomPeers[room].pcb_count,
pdb_count = roomPeers[room].pdb_count;
if (pcb_count == 0 && pdb_count == 0)
delete roomPeers[room];
// Remove socket info
socketRooms[sails.sockets.getId(socket)].splice(index, 1); socketRooms[sails.sockets.getId(socket)].splice(index, 1);
// broadcast data // broadcast data
sails.hooks.events.broadcastEvent( sails.hooks.events.broadcastEvent(
room, room,
sails.hooks.events.roomSubscribersChange({'pdb_count': pcb_count, 'pcb_count': pdb_count}) sails.hooks.events.roomSubscribersChange({
'room': room,
'pdb_count': pdb_count,
'pcb_count': pcb_count
})
); );
} }
} }
...@@ -141,6 +161,17 @@ module.exports = function roomsHook (sails) { ...@@ -141,6 +161,17 @@ module.exports = function roomsHook (sails) {
*/ */
supervisor: function (supervisorId) { supervisor: function (supervisorId) {
return 'supervisorRoom' + supervisorId; return 'supervisorRoom' + supervisorId;
},
/**
* Disconnect
* Call from config/sockets.js after a socket disconnects
*/
disconnect: function(socket) {
var rooms = socketRooms[sails.sockets.getId(socket)];
for (var i = 0; i < rooms.length; i++)
sails.hooks.rooms.unsubscribeFromRoom(rooms[i].room, socket);
} }
}; };
}; };
...@@ -218,6 +218,8 @@ ...@@ -218,6 +218,8 @@
"note": "Note", "note": "Note",
"notes": "Notes", "notes": "Notes",
"November": "November", "November": "November",
"num_pcbs": "Connections from Pictogram Tablet",
"num_pdbs": "Connections from Pictogram Web",
"num_peers": "Peers", "num_peers": "Peers",
"num_sessions_per_day_in": "Sessions per day in", "num_sessions_per_day_in": "Sessions per day in",
"num_sessions_per_month_in": "Sessions per months in", "num_sessions_per_month_in": "Sessions per months in",
......
...@@ -218,6 +218,8 @@ ...@@ -218,6 +218,8 @@
"note": "Nota", "note": "Nota",
"notes": "Notas", "notes": "Notas",
"November": "Noviembre", "November": "Noviembre",
"num_pcbs": "Conexiones desde Pictogram Tablet",
"num_pdbs": "Conexiones desde Pictogram Web",
"num_peers": "Conectados", "num_peers": "Conectados",
"num_sessions_per_day_in": "Número de sesiones por día en", "num_sessions_per_day_in": "Número de sesiones por día en",
"num_sessions_per_month_in": "Número de sesiones por meses en", "num_sessions_per_month_in": "Número de sesiones por meses en",
......
...@@ -361,7 +361,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr ...@@ -361,7 +361,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
// websockets events handling (Dashboard) // websockets events handling (Dashboard)
// //
io.socket.on('update_peers', function (data) { io.socket.on('update_peers', function (data) {
if($scope.ws && $scope.sessionRunning && $scope.actual_try.actions && $scope.paused == false && data.count<2) { if($scope.ws && $scope.sessionRunning && $scope.actual_try.actions && $scope.paused == false && data.pcb_count<1) {
$scope.pause_ws(); $scope.pause_ws();
$scope.pauseTimer(); $scope.pauseTimer();
ngToast.warning({ ngToast.warning({
......
...@@ -52,9 +52,11 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl( ...@@ -52,9 +52,11 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl(
// WebSockets communication // WebSockets communication
// //
io.socket.on('update_peers', function (data) { io.socket.on('update_peers', function (data) {
$scope.studentData.pcb_count = data.pcb_count; if (data.room.search('student') != -1) {
$scope.studentData.pdb_count = data.pdb_count; $scope.studentData.pcb_count = data.pcb_count;
$scope.$apply(); $scope.studentData.pdb_count = data.pdb_count;
$scope.$apply();
}
}); });
io.socket.on('reconnect', function () { io.socket.on('reconnect', function () {
......
...@@ -19,27 +19,29 @@ ...@@ -19,27 +19,29 @@
<img ng-src="{{studentData.pic}}" alt="" title="" /> <img ng-src="{{studentData.pic}}" alt="" title="" />
</div> </div>
</div> </div>
<div class="col-md-10"> <div class="col-md-9">
<div style="margin-left: 5px"><h4>{{studentData.name}} {{studentData.surname}}</h4></div> <div style="margin-left: 5px"><h4>{{studentData.name}} {{studentData.surname}}</h4></div>
<div style="margin-left: 5px" class="text-left"> <div style="margin-left: 5px" class="text-left">
<span>{{studentData.current_instruction | translate}} </span><br/> <span>{{studentData.current_instruction | translate}} </span><br/>
<span class="text-muted">({{studentData.current_method | translate}})</span> <span class="text-muted">({{studentData.current_method | translate}})</span>
</div> </div>
</div> </div>
<div class="col-md-1"> <div class="col-md-2">
<div style="margin-left: 5px; margin-top: 10px" <div style="margin-left: 5px; margin-top: 10px"
ng-class="{ 'text-left':true, ng-class="{ 'text-left':true,
'pull-right': true,
'text-success': studentData.pdb_count > 0, 'text-success': studentData.pdb_count > 0,
'text-danger': studentData.pdb_count == 0}" 'text-danger': studentData.pdb_count == 0}"
popover="{{ 'num_peers' | translate }}" popover-trigger="mouseenter"> popover="{{ 'num_pdbs' | translate }}" popover-trigger="mouseenter">
<i class="fa fa-desktop" aria-hidden="true"></i> <i class="fa fa-desktop" aria-hidden="true"></i>
{{studentData.pdb_count}} {{studentData.pdb_count}}
</div> </div>
<div style="margin-left: 5px; margin-top: 10px" <div style="margin-left: 5px; margin-top: 10px"
ng-class="{ 'text-left':true, ng-class="{ 'text-left':true,
'pull-right': true,
'text-success': studentData.pcb_count > 0, 'text-success': studentData.pcb_count > 0,
'text-danger': studentData.pcb_count == 0}" 'text-danger': studentData.pcb_count == 0}"
popover="{{ 'num_peers' | translate }}" popover-trigger="mouseenter"> popover="{{ 'num_pcbs' | translate }}" popover-trigger="mouseenter">
<i class="fa fa-tablet" aria-hidden="true"></i> <i class="fa fa-tablet" aria-hidden="true"></i>
{{studentData.pcb_count}} {{studentData.pcb_count}}
</div> </div>
......
...@@ -46,12 +46,12 @@ ...@@ -46,12 +46,12 @@
</div> </div>
<!-- controls for session recording--> <!-- controls for session recording-->
<div ng-show="studentData.num_peers<2 && section == 'new'" class="form-group"> <div ng-show="studentData.pcb_count<1 && section == 'new'" class="form-group">
<span class="glyphicon glyphicon-exclamation-sign text-warning" aria-hidden="true"></span> <span class="glyphicon glyphicon-exclamation-sign text-warning" aria-hidden="true"></span>
<span class="label label-warning">{{ 'warning_no_tablet_online' | translate }}</span> <span class="label label-warning">{{ 'warning_no_tablet_online' | translate }}</span>
</div> </div>
<div class="input-group" ng-show="selected.item != -1 && studentData.num_peers>1 && section == 'new'"> <div class="input-group" ng-show="selected.item != -1 && studentData.pcb_count>0 && section == 'new'">
<div class="btn-group pull-right"> <div class="btn-group pull-right">
<button type="button" <button type="button"
class="btn btn-default btn-sm" class="btn btn-default btn-sm"
......
...@@ -43,7 +43,8 @@ dashboardControllers.controller('SupervisorCtrl', function SupervisorCtrl( ...@@ -43,7 +43,8 @@ dashboardControllers.controller('SupervisorCtrl', function SupervisorCtrl(
IOService.post('/sup/subscribe', { IOService.post('/sup/subscribe', {
action: 'subscribe', action: 'subscribe',
attributes: { attributes: {
id_sup: $scope.user.id id_sup: $scope.user.id,
ui: 'PDB'
} }
}); });
......
...@@ -35,11 +35,8 @@ module.exports.sockets = { ...@@ -35,11 +35,8 @@ module.exports.sockets = {
* * * *
***************************************************************************/ ***************************************************************************/
afterDisconnect: function (session, socket, cb) { afterDisconnect: function (session, socket, cb) {
sails.hooks.rooms.disconnect(socket);
// Leave all rooms cb();
var rooms = sails.sockets.socketRooms(socket);
for (var i = 0; i < rooms.length; i++)
sails.hooks.rooms.unsubscribeFromRoom(rooms[i], socket);
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment