private Mono<Set<Long>> forwardClientMessageByRecipientId(
            @NotNull ByteBuf notificationData,
            @NotNull Long recipientId,
            @NotNull Set<UserSessionId> excludedUserSessionIds) {
        return userStatusService.getUserSessionsStatus(recipientId)
                .doOnError(t -> notificationData.release())
                .flatMap(sessionsStatus -> {
                    if (sessionsStatus.isOffline()) {
                        notificationData.release();
                        return Mono.just(Set.of(recipientId));
                    }
                    Set<String> activeNodeIds = sessionsStatus.getActiveNodeIds();
                    if (activeNodeIds.isEmpty()) {
                        notificationData.release();
                        return Mono.just(Set.of(recipientId));
                    }
                    return forwardClientMessageToNodes(notificationData,
                            activeNodeIds,
                            recipientId,
                            excludedUserSessionIds,
                            null);
                })
                .switchIfEmpty(Mono.fromCallable(() -> {
                    notificationData.release();
                    return Set.of(recipientId);
                }));
    }
@return offline user IDs
@implNote Return {@code Set<Long>} instead of {@code Long} for consistency.
turms-server-common/src/main/java/im/turms/server/common/infra/message/OutboundMessageManager.java