asp.net mvc - signalR tracking connected users -


i need check whether specific user still connected.

i have following hashset keeps track of users:

public static class userhandler {     public static hashset<string> connectedids = new hashset<string>(); } 

so on disconnected:

    public override task ondisconnected()     {         userhandler.connectedids.remove(this.context.connectionid);         if (userhandler.connectedids.count == 0)         {                // stop task -> set cancellation         }         return base.ondisconnected();     } 

and on connected:

    public override task onconnected()     {         logger.log.file.info("[taskactionstatus hub => onconnected] start");          userhandler.connectedids.add(this.context.connectionid);          // start task if @ least 1 listener         if (userhandler.connectedids.count < 2)         {             // start task -> (while loop gets data db every 2 sec)         }          return base.onconnected();     } 

now, problem arises when users closes his/her browser window. there no way me know if he/she disconnected.

so based on question here, call each client , response. i'm not sure how it.

i guess have this:

public static void checkconnectedusers() {     var context = globalhost.connectionmanager.gethubcontext<taskactionstatus>();     foreach (var connection in userhandler.connectedids)     {         context.clients.client(connection).verifyconnected("online?");     } } 

but how response form client?

edit: steps executed:

i need exact number of users connected because if there @ least 1 user connected need start task. , want ensure 1 task running connected users < 2 (start task). suppose situation this: 2 users view page using signalr. hashset contains 2 ids , task running. 1 closes his/her browser , after few seconds , refreshes his/hers. now, first 1 (the 1 closed his/her browser did not execute ondisconnected method hashset still has his/her connectionid, , 1 "refreshed" did execute ondisonnected , onconnected added connectionid hashset. instead of having 1 connectionid in hashset , starting task, hashset contains 2 (old-not connected anymore , 1 refreshed his/her browser), , task never got started again.

thanks

with signalr 1.0, ondisconnected should fire, when users close window (the exception being if server restarts).

ondisconnected may not fire immediately, because if client doesn't "abort" connection considered "unclean" since there chance client may try , reconnect (and if reconnect haven't disconnected according signalr's semantics).

by default, should take 30 seconds server call ondisconnected "unclean" disconnect. can reconfigured via globalhost.configuration.disconnecttimeout.


Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -