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