/// <summary> /// Send a list of channels to agent /// </summary> /// <param name="agentLivechatUserId">Agent id</param> /// <param name="connectionId">Agent's connection Id</param> /// <returns>List of channels</returns> public virtual async Task <List <LivechatChannel> > SendChannelListToAgent(string connectionId, string agentLivechatUserId) { var onlineUsers = await userTracker.UsersOnline(); // Removes current user (agent) from this verification onlineUsers = onlineUsers.Where(t => t.LivechatUserId != agentLivechatUserId); // Get agent channels var channels = await uow .GetRepository <ChannelRepository>() .GetAgentChannels(agentLivechatUserId); // Check list of channels and assign HasOnlineUsers when they have online users foreach (var channel in channels) { channel.HasOnlineUsers = onlineUsers.Any(t => t.Channels.Any(c => c.ChannelId == channel.ChannelId) ); } // Send channels list await clientsManager .Client(connectionId) .SendAsync(HubMessages.ACTIVE_CHANNELS, channels); return(channels); }
public IActionResult CheckIfUserExist([FromQuery] string name) { if (_userTracker.UsersOnline().FirstOrDefault(u => u.Name == name) != null) { return(Conflict($"User with name {name} already exists")); } return(NoContent()); }
public async void OnMessageAdded(Message message) { var onlineUsers = await _userTracker.UsersOnline(); //Check they are even online var excepts = onlineUsers .Where(u => u.Owner.Id != message.SenderId && u.Owner.Id != message.ReceiverId) .Select(u => u.ConnectionId); await Notify(hub => hub.Send(message), excepts); }
//returns connection id if it's online otherwise returns null private async Task <string> GetConnectionId(string receiverId) { var onlineUsers = await _userTracker.UsersOnline(); var connection = onlineUsers.FirstOrDefault(u => u.Owner.Id == receiverId); return(connection?.ConnectionId); }
public async Task SetSkill(string skill) { foreach (var user in _userTracker.UsersOnline()) { if (user.ConnectionId == Context.ConnectionId) { user.Skill = skill; break; } } await Groups.RemoveAsync(Context.ConnectionId, "SMS"); await Groups.RemoveAsync(Context.ConnectionId, "Regular"); if (!string.IsNullOrWhiteSpace(skill)) { await Groups.AddAsync(Context.ConnectionId, skill); } }
public override async Task OnDisconnectedAsync(HubConnectionContext connection) { await _wrappedHubLifetimeManager.OnDisconnectedAsync(connection); _connections.Remove(connection); var users = await _userTracker.UsersOnline(); var user = users.Where(t => t.ConnectionId == connection.ConnectionId).FirstOrDefault(); await _userTracker.RemoveUser(connection, user.PushToken.Any(t => t.Device != "desktop")); }
public IEnumerable <UserDetails> LoggedOnUsers() { return(_userTracker.UsersOnline()); }
public Task <IEnumerable <UserDetails> > GetUsersOnline() { return(_userTracker.UsersOnline()); }
private async Task <bool> IsOnline(string userId) { var onlineUsers = await _userTracker.UsersOnline(); return(onlineUsers.FirstOrDefault(u => u.Owner.Id == userId) != null); }
private async Task <string> GetConId(string id) { var onlineUsers = await _userTracker.UsersOnline(); return(onlineUsers.FirstOrDefault(u => u.Owner.Id == id)?.ConnectionId); }