issue #872 fixed

parent 3916a007
......@@ -1174,28 +1174,20 @@ module.exports = {
},
//
// Unsubscribe to websockets events
// Unsubscribe from websockets events
//
unsubscribe: function (req, res) {
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) {
var rooms = sails.sockets.socketRooms(req.socket);
console.log("Subscribed rooms in socket: " + JSON.stringify(rooms));
// 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"
});
sails.hooks.rooms.unsubscribeFromRoom(
sails.hooks.rooms.student(attributes.id_stu),
req.socket
);
}
res.ok({ msg: "Unsubscribed from student's rooms"});
},
//
......
......@@ -7,10 +7,8 @@
* to obtain an ID.
* @type {Object}
*/
var socketRooms={}; // {socketId => [roomId, ...]}
var pcb_count=0;
var pdb_count=0;
var socketRooms = {}; // {socketId => [roomId, ...]}
var roomPeers = {}; // {roomId: {pcb_count, pdb_count}}
module.exports = function roomsHook (sails) {
return {
......@@ -57,21 +55,31 @@ module.exports = function roomsHook (sails) {
var socket_id = sails.sockets.getId(socket);
// append to socketRooms
if (!socketRooms[socket_id])
socketRooms[socket_id] = [{room: room, ui: ui}];
else
socketRooms[socket_id].push({room: room, ui: ui});
if (ui == 'PCB')
pcb_count++;
if (ui == 'PDB')
pdb_count++;
// append/updated room peer counters
if (!roomPeers[room]) {
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
sails.hooks.events.broadcastEvent(
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) {
var index = socketRooms[sails.sockets.getId(socket)].findIndex(x => x.room == room);
if (index > -1) {
// Update room counters
if (socketRooms[sails.sockets.getId(socket)][index].ui == 'PDB')
pdb_count--;
else
pcb_count--;
roomPeers[room].pdb_count--;
if (socketRooms[sails.sockets.getId(socket)][index].ui == 'PCB')
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);
// broadcast data
sails.hooks.events.broadcastEvent(
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) {
*/
supervisor: function (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 @@
"note": "Note",
"notes": "Notes",
"November": "November",
"num_pcbs": "Connections from Pictogram Tablet",
"num_pdbs": "Connections from Pictogram Web",
"num_peers": "Peers",
"num_sessions_per_day_in": "Sessions per day in",
"num_sessions_per_month_in": "Sessions per months in",
......
......@@ -218,6 +218,8 @@
"note": "Nota",
"notes": "Notas",
"November": "Noviembre",
"num_pcbs": "Conexiones desde Pictogram Tablet",
"num_pdbs": "Conexiones desde Pictogram Web",
"num_peers": "Conectados",
"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",
......
......@@ -361,7 +361,7 @@ dashboardControllers.controller('StudentSessionCtrl', function StudentSessionCtr
// websockets events handling (Dashboard)
//
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.pauseTimer();
ngToast.warning({
......
......@@ -52,9 +52,11 @@ dashboardControllers.controller('StudentCtrl', function StudentCtrl(
// WebSockets communication
//
io.socket.on('update_peers', function (data) {
$scope.studentData.pcb_count = data.pcb_count;
$scope.studentData.pdb_count = data.pdb_count;
$scope.$apply();
if (data.room.search('student') != -1) {
$scope.studentData.pcb_count = data.pcb_count;
$scope.studentData.pdb_count = data.pdb_count;
$scope.$apply();
}
});
io.socket.on('reconnect', function () {
......
......@@ -19,27 +19,29 @@
<img ng-src="{{studentData.pic}}" alt="" title="" />
</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" class="text-left">
<span>{{studentData.current_instruction | translate}} </span><br/>
<span class="text-muted">({{studentData.current_method | translate}})</span>
</div>
</div>
<div class="col-md-1">
<div class="col-md-2">
<div style="margin-left: 5px; margin-top: 10px"
ng-class="{ 'text-left':true,
'pull-right': true,
'text-success': 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>
{{studentData.pdb_count}}
</div>
<div style="margin-left: 5px; margin-top: 10px"
ng-class="{ 'text-left':true,
'pull-right': true,
'text-success': 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>
{{studentData.pcb_count}}
</div>
......
......@@ -46,12 +46,12 @@
</div>
<!-- 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="label label-warning">{{ 'warning_no_tablet_online' | translate }}</span>
</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">
<button type="button"
class="btn btn-default btn-sm"
......
......@@ -43,7 +43,8 @@ dashboardControllers.controller('SupervisorCtrl', function SupervisorCtrl(
IOService.post('/sup/subscribe', {
action: 'subscribe',
attributes: {
id_sup: $scope.user.id
id_sup: $scope.user.id,
ui: 'PDB'
}
});
......
......@@ -35,11 +35,8 @@ module.exports.sockets = {
* *
***************************************************************************/
afterDisconnect: function (session, socket, cb) {
// Leave all rooms
var rooms = sails.sockets.socketRooms(socket);
for (var i = 0; i < rooms.length; i++)
sails.hooks.rooms.unsubscribeFromRoom(rooms[i], socket);
sails.hooks.rooms.disconnect(socket);
cb();
},
......
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