public static async Task <IHubUserModel> FindUser(string connectionId) { while (_lock) { Thread.Sleep(100); } _lock = true; IHubUserModel user = null; try { var findIdRecord = _store_connectedIds.FirstOrDefault(i => i.ConnectionId == connectionId); if (findIdRecord != null) { var getUser = _store.FirstOrDefault(i => i.Id == findIdRecord.UserId); if (getUser != null) { user = getUser; } } } catch (Exception) { _lock = false; Thread.Sleep(100); user = await FindUser(connectionId).ConfigureAwait(false); } _lock = false; return(user); }
public static async Task <bool> Add(IHubUserModel user) { if (user == null) { throw new ArgumentNullException(nameof(user)); } var addNewUser = false; while (_lock) { Thread.Sleep(100); } _lock = true; try { var connectedId = user.ConnectionId.First(); var findUser = _store.FirstOrDefault(i => i.Id == user.Id); if (findUser != null) { findUser.ConnectionId.Add(connectedId); } else { addNewUser = true; _store.Add(user); } var findId = _store_connectedIds.FirstOrDefault(i => i.ConnectionId == connectedId); if (findId == null) { _store_connectedIds.Add(new HubConnectedIdModel { UserId = user.Id, ConnectionId = connectedId }); } AddEvent?.Invoke(user); _lock = false; } catch (Exception) { Thread.Sleep(100); return(await Add(user).ConfigureAwait(false)); } return(addNewUser); }