Example #1
0
        private CleanClientMeta GetCleanClientMeta(string groupId = "")
        {
            ChatClientMeta meta = _storage.GetUserByConnectionId(Context.ConnectionId);

            return(new CleanClientMeta
            {
                UserName = meta.User.FirstName,
                GroupId = !String.IsNullOrEmpty(groupId) ? groupId : meta.GroupId
            });
        }
Example #2
0
        public async Task SendMessage(string message)
        {
            ChatClientMeta meta = _storage.GetUserByConnectionId(Context.ConnectionId);

            if (meta.GroupId == null)
            {
                throw new HubException("Please, join group if you want to send message");
            }

            await Clients.Group(meta.GroupId).SendAsync(ChatEvents.SendMessage,
                                                        new SimpleMessage {
                User = meta.User.FirstName, Message = message
            });
        }
Example #3
0
        public async Task LeaveGroup(string groupId)
        {
            ChatClientMeta meta  = _storage.GetUserByConnectionId(Context.ConnectionId);
            var            group = _storage.GetGroupById(groupId);

            if (group == null)
            {
                throw new Exception("Group with the same id doesnt exists");
            }

            _storage.UpdateConnection(Context.ConnectionId, meta.User, null);
            await Groups.RemoveFromGroupAsync(Context.ConnectionId, group.Id);

            await Clients.Caller.SendAsync(ChatEvents.GroupLeft, group);

            NofifyAboutLeaving(group.Id, meta.User.FirstName);
        }
Example #4
0
        public void AddConnection(T key, ChatUser user)
        {
            if (user == null)
            {
                return;
            }

            lock (_connections)
            {
                if (!_connections.TryGetValue(key, out ChatClientMeta meta))
                {
                    meta = new ChatClientMeta {
                        User = user
                    };
                    _connections.Add(key, meta);
                }
            }
        }
Example #5
0
        public async Task EnterGroup(string groupId)
        {
            ChatClientMeta meta  = _storage.GetUserByConnectionId(Context.ConnectionId);
            var            group = _storage.GetGroupById(groupId);

            if (group == null)
            {
                throw new Exception("Group with the same id doesnt exists");
            }

            _storage.UpdateConnection(Context.ConnectionId, meta.User, group.Id);
            await Groups.AddToGroupAsync(Context.ConnectionId, group.Id);

            await Clients.Caller.SendAsync(ChatEvents.GetGroupById, group);

            await Clients.Caller.SendAsync(ChatEvents.Notify, $"You joined to '{group.Name}' group!");

            await Clients.OthersInGroup(group.Id)
            .SendAsync(ChatEvents.Notify, $"{meta.User.FirstName} joined to group!");
        }
Example #6
0
        public void UpdateConnection(T key, ChatUser user, string groupId)
        {
            if (user == null)
            {
                return;
            }

            lock (_connections)
            {
                if (!_connections.TryGetValue(key, out ChatClientMeta meta))
                {
                    return;
                }

                _connections[key] = new ChatClientMeta
                {
                    User    = user,
                    GroupId = groupId
                };
            }
        }