package loan; import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.Applicant; import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.ApplicationPortal; import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.applyForLoan; import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.reject; import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.requestConfirmation; import org.scribble.net.Buf; import org.scribble.net.ObjectStreamFormatter; import org.scribble.net.session.MPSTEndpoint; import org.scribble.net.session.SocketChannelEndpoint; import loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier; import loan.LoanApplication.BuyerBrokerSupplier.channels.Applicant.BuyerBrokerSupplier_Applicant_1; import loan.LoanApplication.BuyerBrokerSupplier.channels.Applicant.BuyerBrokerSupplier_Applicant_2_Cases; import loan.LoanApplication.BuyerBrokerSupplier.roles.Applicant; public class LoanApplicant { public static void main(String[] args) throws Exception { BuyerBrokerSupplier sess = new BuyerBrokerSupplier(); try (MPSTEndpoint<BuyerBrokerSupplier, Applicant> se = new MPSTEndpoint<>(sess, Applicant, new ObjectStreamFormatter())) { se.connect(ApplicationPortal, SocketChannelEndpoint::new, "localhost", 8888); BuyerBrokerSupplier_Applicant_2_Cases branch = new BuyerBrokerSupplier_Applicant_1(se) .send(ApplicationPortal, applyForLoan, "Name", "DoB", 123, 456) .branch(ApplicationPortal); switch (branch.getOp()) { case reject: { branch.receive(reject); break; } case requestConfirmation: { Buf<Integer> b = new Buf<>(); branch.receive(requestConfirmation, b); break; } } } } }