private void Timer()
        {
            while (true)
            {
                try
                {
                    IEnumerable <KeyValuePair <User, UserDetails> > userToDelete =
                        _currentUsers.Where(cu => cu.Value.ActivityTime < DateTime.Now.AddSeconds(-40));
                    foreach (var userDel in userToDelete)
                    {
                        _currentUsers.Remove(userDel);

                        var presenceStatusNotification = new PresenceStatusNotification
                        {
                            Login          = userDel.Key.Login,
                            PresenceStatus = PresenceStatus.Offline
                        };

                        foreach (User user in _currentUsers.Keys)
                        {
                            _currentUsers[user].TopicList.ToList().ForEach(topic => QueueServerService.SendData(topic, ConfigurationService.ExchangeName,
                                                                                                                presenceStatusNotification));
                        }
                    }
                }
                catch
                {
                }

                Thread.Sleep(30000);
            }
        }
Пример #2
0
        public void SendPing(PresenceStatus status)
        {
            var presenceNotification = new PresenceStatusNotification {
                Login = Login, PresenceStatus = status
            };

            _queueClientService.SendData(_configurationService.MainQueueName, RouteKey,
                                         _configurationService.ExchangeName, presenceNotification);
        }
        private void AuthUserProcess(MessageReceivedEventArgs message)
        {
            var authRequest = _serializerService.Deserialize <AuthRequest>(message.Message);

            bool exists = _commonUserListService.UserAuthentication(authRequest);

            if (exists)
            {
                KeyValuePair <User, UserDetails> activeUser =
                    _currentUsers.SingleOrDefault(u => u.Key.Login == authRequest.Login);
                if (activeUser.Key == null)
                {
                    var topicList = new List <string> {
                        message.TopicSender
                    };
                    _currentUsers.Add(new User {
                        Login = authRequest.Login, Status = PresenceStatus.Online
                    },
                                      new UserDetails {
                        ActivityTime = DateTime.Now, TopicList = topicList
                    });
                }
                else
                {
                    if (!activeUser.Value.TopicList.Contains(message.TopicSender))
                    {
                        activeUser.Value.TopicList.Add(message.TopicSender);
                    }
                }
            }

            var authResponse = new AuthResponse
            {
                IsAuthenticated = exists
            };

            QueueServerService.SendData(message.TopicSender, ConfigurationService.ExchangeName, authResponse);

            if (exists)
            {
                var presenceStatusNotification = new PresenceStatusNotification
                {
                    Login          = authRequest.Login,
                    PresenceStatus = PresenceStatus.Online
                };

                foreach (User user in _currentUsers.Keys)
                {
                    _currentUsers[user].TopicList.ToList()
                    .ForEach(
                        topic => QueueServerService.SendData(topic, ConfigurationService.ExchangeName,
                                                             presenceStatusNotification));
                }
            }
        }