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