public async Task RemoveFromGroup(string userToRemoveId, int conversationId, bool IsSelf) { var whoSentId = userProvider.GetUserId(Context); await userService.MakeUserOnline(whoSentId, Context.ConnectionId); try { await chatsService.RemoveUserFromConversation(userToRemoveId, whoSentId, conversationId, IsSelf); MessageDataModel chatEvent; if (IsSelf || userToRemoveId == whoSentId) { chatEvent = await messagesService.AddChatEvent(ChatEventType.Left, userToRemoveId, userToRemoveId, conversationId); } else { chatEvent = await messagesService.AddChatEvent(ChatEventType.Kicked, whoSentId, userToRemoveId, conversationId); } var removedUser = await userService.GetUserById(userToRemoveId); await RemovedFromGroup(userToRemoveId, conversationId); if (removedUser.IsOnline) { foreach (var connection in removedUser.Connections) { await RemoveConnectionFromGroup(connection.ConnectionId, conversationId); } } await SendMessageToGroup(conversationId, whoSentId, chatEvent.ToMessage()); } catch (Exception ex) { await SendError(Context.ConnectionId, ex.Message); logger.LogError(ex.Message); } }