Пример #1
0
        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);
        }
Пример #2
0
        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);
        }