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); } }
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)); } } }