package com.nisum.basicFlowExample;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.SubmissionPublisher;



public class Sample {
    public static void main(String[] args) throws InterruptedException, ExecutionException {

        SubmissionPublisher<Integer> feed=new SubmissionPublisher<>();
        MessageSubscriber<Integer> messageSubscriber=new MessageSubscriber();
        PrintSubscriber<Integer> printSubscriber=new PrintSubscriber();
        feed.subscribe(messageSubscriber);
        feed.subscribe(printSubscriber);
        for (int i = 0; i < 10; i++) {
            if(i==5) {
                System.out.println("Inside Exception block");
                feed.closeExceptionally(new RuntimeException("MyException"));
                break;
            }
            else{
                System.out.println("Inside normal block");
                feed.submit(i);

            }
            sleep(1000);

        }

       feed.close();

    }

    private static Boolean sleep(int ms) {
        try{
            Thread.sleep(ms);
            return true;
        }
        catch(InterruptedException e){
            return false;
        }
    }


}