diff --git a/modules/chat/client/controllers/chat.client.controller.js b/modules/chat/client/controllers/chat.client.controller.js index a6b45b88..49a73671 100644 --- a/modules/chat/client/controllers/chat.client.controller.js +++ b/modules/chat/client/controllers/chat.client.controller.js @@ -28,6 +28,26 @@ $state.go('home'); } + registerCallback(); + + // Make sure the Socket is connected + if (!Socket.socket) { + Socket.connect(); + registerCallback(); + } + + // Remove the event listener when the controller instance is destroyed + $scope.$on('$destroy', function () { + Socket.disconnect(); + Socket.removeListener('chatMessage'); + Socket.removeListener('usersList'); + Socket.removeListener('join'); + Socket.removeListener('quit'); + Socket.removeListener('ban'); + }); + } + + function registerCallback() { // add an event listener to the 'error' event Socket.on('error', function (err) { var message = { @@ -61,20 +81,6 @@ Socket.on('quit', function (message) { vm.onUserQuit(message); }); - - // Make sure the Socket is connected - if (!Socket.socket) { - Socket.connect(); - } - - // Remove the event listener when the controller instance is destroyed - $scope.$on('$destroy', function () { - Socket.removeListener('chatMessage'); - Socket.removeListener('usersList'); - Socket.removeListener('join'); - Socket.removeListener('quit'); - Socket.removeListener('ban'); - }); } /** diff --git a/modules/core/client/services/socket.io.client.service.js b/modules/core/client/services/socket.io.client.service.js index a00299ae..32f8002a 100644 --- a/modules/core/client/services/socket.io.client.service.js +++ b/modules/core/client/services/socket.io.client.service.js @@ -11,6 +11,7 @@ function Socket(Authentication, $state, $timeout) { var service = { connect: connect, + disconnect: disconnect, emit: emit, on: on, removeListener: removeListener, @@ -29,6 +30,12 @@ } } + // disconnect to Socket.io server + function disconnect() { + service.socket.disconnect(); + service.socket = null; + } + // Wrap the Socket.io 'emit' method function emit(eventName, data) { if (service.socket) {