import java.util.concurrent.Flow.*;
public class ReactiveProgrammingExample {
public static void main(String[] args) {
Publisher<String> publisher = new SimplePublisher();
Subscriber<String> subscriber = new SimpleSubscriber();
publisher.subscribe(subscriber);
publisher.submit("Hello");
publisher.submit("World");
publisher.submit("!");
publisher.complete();
}
static class SimplePublisher implements Publisher<String> {
private Subscriber<? super String> subscriber;
@Override
public void subscribe(Subscriber<? super String> subscriber) {
this.subscriber = subscriber;
this.subscriber.onSubscribe(new Subscription() {
@Override
public void request(long n) {
publishEvents();
}
@Override
public void cancel() {
}
});
}
private void publishEvents() {
subscriber.onNext("Hello");
subscriber.onNext("World");
subscriber.onNext("!");
subscriber.onComplete();
}
public void submit(String event) {
}
public void complete() {
}
}
static class SimpleSubscriber implements Subscriber<String> {
private Subscription subscription;
@Override
public void onSubscribe(Subscription subscription) {
this.subscription = subscription;
this.subscription.request(1);
}
@Override
public void onNext(String item) {
System.out.println("Received: " + item);
this.subscription.request(1);
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onComplete() {
}
}
}