public void AddUsersForAddUsersToChat(string jsonUsers, string userGuid, string chatGuid) { var userElasticResult = _userRepository.Get(userGuid); if (!userElasticResult.Success) { Clients.Caller.onAddUsersForAddUsersToChatCaller( JsonConvert.SerializeObject(new { error = true, message = UserErrorMessage })); return; } var user = userElasticResult.Value; var chatElasticResult = _chatRepository.Get(chatGuid); if (!chatElasticResult.Success) { Clients.Caller.onAddUsersForAddUsersToChatCaller( JsonConvert.SerializeObject(new { error = true, message = ChatErrorMessage })); return; } var chat = chatElasticResult.Value; var usersGuids = JsonConvert.DeserializeObject <string[]>(jsonUsers); var usersElasticResult = _userRepository.GetAllByGuids(usersGuids); if (!usersElasticResult.Success) { Clients.Caller.onAddUsersForAddUsersToChatCaller( JsonConvert.SerializeObject(new { error = true, message = ServerErrorMessage })); return; } var users = usersElasticResult.Value; var chatUserElasticResult = _chatUserRepository.GetAllByChatGuid(chatGuid); if (!chatUserElasticResult.Success) { Clients.Caller.onAddUsersForAddUsersToChatCaller( JsonConvert.SerializeObject(new { error = true, message = ServerErrorMessage })); return; } var chatUsers = chatUserElasticResult.Value; var newUsers = users.Where(u => chatUsers.All(cu => cu.UserGuid != u.Guid)).ToArray(); foreach (var newUser in newUsers) { var elasticResult = _chatUserRepository.Add(chatGuid, newUser.Guid); if (!elasticResult.Success) { Clients.Caller.onAddUsersForAddUsersToChatCaller( JsonConvert.SerializeObject(new { error = true, message = ServerErrorMessage })); return; } var messageElasticResult = _messageRepository.AddAdminMessage(chatGuid, user, string.Format(NewChatUserFormatString, newUser.UserName)); if (!messageElasticResult.Success) { Clients.Caller.onAddUsersForAddUsersToChatCaller( JsonConvert.SerializeObject(new { error = true, message = ServerErrorMessage })); return; } var message = messageElasticResult.Value; Clients.Group(chatGuid).onSendMessageOthers(JsonConvert.SerializeObject(new { message, chatGuid })); foreach (var connectionId in newUser.ConnectionIds) { Groups.Add(connectionId, chatGuid); } } var newUsersConnectionIds = newUsers.SelectMany(u => u.ConnectionIds).ToArray(); Clients.Clients(newUsersConnectionIds) .onAddUsersForAddUsersToChatNewUsers(JsonConvert.SerializeObject(chat)); }