예제 #1
0
        public async Task <IConversation> JoinUserToConversation(IConversation conversation, long userId, string signalRConnectionId)
        {
            bool exists = await _conversationRepository.ConversationHasActiveUser(conversation.ConversationId, userId);

            if (!exists)
            {
                var activeUser = await _userSummaryRepository.GetById(userId);

                if (activeUser != null && !string.IsNullOrWhiteSpace(activeUser.DisplayName))
                {
                    _conversationRepository.JoinUserToConversation(conversation.ConversationId, userId, signalRConnectionId);
                    conversation.UserJoined(activeUser);
                }
            }
            return(conversation);
        }
예제 #2
0
        public void Subscribe(int conversationId, long userId)
        {
            Groups.Add(Context.ConnectionId, conversationId.ToString());
            var conversationTask = _conversationBoundedContext.GetById(conversationId);

            conversationTask.ContinueWith(d =>
            {
                var joinUserTask = _conversationBoundedContext.JoinUserToConversation(d.Result, userId, Context.ConnectionId);
                joinUserTask.ContinueWith(jut =>
                {
                    if (jut.Result != null)
                    {
                        var userTask = _userSummaryRepository.GetById(userId);
                        userTask.ContinueWith(u =>
                        {
                            Clients.Group(conversationId.ToString()).userJoined(u.Result);
                        });
                    }
                });
            });
        }