javascript - SignalR changing hub subscription -


i have simple app, displays list of available signalr hubs. user selects hub , connects it, subscribes event add messages table on page. user can send messaged hub fire subscription adding message table. works great.

now if user selects hub, app connects , sets new subscription, original subscription still fires causing duplicate messages added table. each time hub changed further subscriptions added causing 1 send result in many messages in table.

i have tried disconnecting hub, disposing hub , trying remove subscription hubproxy.off(eventname), nothing seems work, other page reload.

here code have added onhub changed function happening.

any ideas appreciated. :)

function hubviewmodel() {     var self = this;     self.hubconnection = '';     self.hub = '';      $.getscript("../signalr/hubs");      self.hubs = ko.observablearray();     self.selectedhub = ko.observable();     self.messagetext = ko.observable();     self.messagecollection = ko.observablearray();      self.hubchanged = function () {          // setup hub connection.         $.connection.hub.url = "../signalr";         self.hubconnection = $.hubconnection();          // selected hub name.         var selectedhubname;         _.each(self.hubs(), function(item) {             if (item.hubid == self.selectedhub()) {                 selectedhubname = item.hubname;             }         });          // check selected connection         if (self.selectedhub()) {              // create proxy.             self.hub = self.hubconnection.createhubproxy(selectedhubname);              // remove existing listener(s).             self.hub.off('addnewmessagetopage');              // setup listener.             self.hub.on('addnewmessagetopage', function (sender, message) {                 self.messagecollection().push({ hubname: selectedhubname, name: selectedhubname, message: message, datetime: new date().tolocalestring() });                 $('#hubmessagegrid').dxdatagrid('instance').refresh();             });              // start connection.             self.hubconnection.start()                 .done(function() {                     toastr.success('hub connected');                     $('#sendmessagebutton').click(function() {                         self.hub.invoke('sendall', 'hub management page', self.messagetext());                         self.messagetext('');                     });                  })                 .fail(function(error) {                     toastr.error('hub connection ' + error);                 });         }     }; 

you can disconnect hub first calling self.hub.stop(); function


Comments