asp.net - Signalr - Associating usernames with connectionIds -


here hub:

[hubname("marketwatch")] public class marketwatchhub : hub {     public override task onconnected()     {         socketcommunicator.instance.userconnected(context.connectionid, context.user.identity.name);          return base.onconnected();     }      public override task ondisconnected()     {         socketcommunicator.instance.userdisconnected(context.connectionid);          return base.ondisconnected();     }      public override task onreconnected()     {         // todo: implement...         return base.onreconnected();     }      public list<marketdataresponse> getallmarketwatchdata()     {         return socketcommunicator.instance.marketdatalist;     } } 

and here simplified version of socketcommunicator class:

public class socketcommunicator {     private static socketcommunicator _instance = new socketcommunicator();      public static socketcommunicator instance     {         { return socketcommunicator._instance; }     }      private socket socket { get; set; }      private readonly object lockobj = new object();      private ihubcontext hubcontext;      private list<userdetail> connectedusers;      public list<marketdataresponse> marketdatalist;      private socketcommunicator() { }      public void userconnected(string connectionid, string username)     {         lock (lockobj)         {             connectedusers.add(new userdetail() { connectionid = connectionid, username = username });         }     }      public void userdisconnected(string connectionid)     {         lock (lockobj)         {             connectedusers.removeall(ud => ud.connectionid == connectionid);         }     }      public void getmarketdata()     {         // , set this.marketdatalist     }         } 

when hit f5 , debug application works charm. when user logs in, onconnected method in hub called , when user logs off ondisconnected method called. if user logs in , close his/her browser, ondisconnected method not being called. means in time, connectedusers list contain enormous number of userdetail objects not connected. how can avoid situation? there better way store user - connection id association?

thanks in advance,

how long waiting ondisconnect called? isn't instantaneous, if client doesn't close 'cleanly' (i.e. closing browser). should called eventually, once connection times-out.

i have similar setup , works fine.


Comments

Popular posts from this blog

Change php variable from jquery value using ajax (same page) -

Pull out data related to my apps from Android Play Store and iOS App Store -

How can I fetch data from a web server in an android application? -