/// <summary> /// Add a connection Id to a user and save it in the DB. /// </summary> /// <param name="auth"></param> /// <param name="connectionId"></param> public static void AddUserConnectionId(AuthenticationResponse auth, string connectionId) { try { if (UserConnectionIds == null) { UserConnectionIds = new Dictionary <AuthenticationResponse, List <string> >(); log.Warning($"{ClassName} ----- User connection list was null, newly created!"); } if (UserConnectionIds.Count == 0 || UserConnectionIds.Count(x => x.Key.User._id == auth.User._id) == 0) { UserConnectionIds.Add(auth, new List <string>()); log.Debug($"{ClassName} userId = [{auth.User._id}] successfully referenced into connection list."); } UserConnectionIds.First(x => x.Key.User._id == auth.User._id).Value.Add(connectionId); } catch (Exception e) { log.Warning($"{ClassName} Unable to add auth. Error [{e.Message}] - Stack [{e.StackTrace}]."); } try { SaveUserConnectionIds(); } catch (Exception e) { log.Warning($"{ClassName} Unable to add user count from database! Exception = [{e.Message}]"); } }
/// <summary> /// Event: disconnected. /// </summary> /// <param name="exception"></param> /// <returns></returns> public override Task OnDisconnectedAsync(Exception exception) { string connectionId = Context.ConnectionId; try { if (UserConnectionIds.Count(x => x.Value.Contains(connectionId)) != 0) { BaseHubHandler <T> .RemoveUserConnectionId(connectionId); } } catch (Exception e) { log.Warning($"{ClassName} Error disconnecting #1! StackTrace = {e.StackTrace}."); } try { if (UserConnectionIds.Count(x => x.Value.Contains(connectionId)) == 0) { return(base.OnDisconnectedAsync(exception)); } } catch (Exception e) { log.Warning($"{ClassName} Error disconnecting #2! StackTrace = {e.StackTrace}."); } return(base.OnDisconnectedAsync(exception)); }