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
Post a Comment