Java Flow.Subscriber - Как я могу отписаться?

Я создаю пользовательскую систему событий, используя JDK 9 Flow API, поэтому у меня есть комната (которая реализует Flow.Subscriber<Notification>), у него может быть много пользователей, и каждый пользователь может предлагать (рассылать) обновления в любое время.

Когда пользователь входит в комнату, я подписываюсь на обновления в комнате user.subscribe(this), Но отписки нет, как можно отписаться от пользователя, когда он выходит из комнаты?

public abstract class Room implements Flow.Subscriber<Notification> {
    private Flow.Subscription subscription;

    public void addUser(User user) {
        user.subscribe(this);
    }

    public void removeUser(User user) {
        // How can I unsubscribe the user?
    }

    @Override
    public void onSubscribe(final Flow.Subscription subscription) {
        this.subscription = subscription;
        subscription.request(1);
    }

    @Override
    public void onError(final Throwable throwable) {
        // ...
    }

    @Override
    public void onNext(final Notification notification) {
        // ...
        subscription.request(1);
    }

    @Override
    public void onComplete() {
        // User left
    }
}

Класс пользователя:

public class User extends SubmissionPublisher<Notification> {

    ....

    public int offer(Notification item) {
        return super.offer(item, (sub, msg) -> false);
    }
}

0 ответов

Другие вопросы по тегам