/// <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);
        }
Beispiel #2
0
 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());
 }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        //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);
        }
Beispiel #5
0
 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"));
        }
Beispiel #7
0
 public IEnumerable <UserDetails> LoggedOnUsers()
 {
     return(_userTracker.UsersOnline());
 }
Beispiel #8
0
 public Task <IEnumerable <UserDetails> > GetUsersOnline()
 {
     return(_userTracker.UsersOnline());
 }
Beispiel #9
0
        private async Task <bool> IsOnline(string userId)
        {
            var onlineUsers = await _userTracker.UsersOnline();

            return(onlineUsers.FirstOrDefault(u => u.Owner.Id == userId) != null);
        }
Beispiel #10
0
        private async Task <string> GetConId(string id)
        {
            var onlineUsers = await _userTracker.UsersOnline();

            return(onlineUsers.FirstOrDefault(u => u.Owner.Id == id)?.ConnectionId);
        }