package loan;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.Applicant;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.ApplicationPortal;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.FinanceDept;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.ProcessingDept;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.applyForLoan;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.checkEligibility;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.getLoanAmount;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.reject;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.requestConfirmation;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.respond;
import static loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier.sendLoanAmount;
import loan.LoanApplication.BuyerBrokerSupplier.BuyerBrokerSupplier;
import loan.LoanApplication.BuyerBrokerSupplier.channels.ApplicationPortal.BuyerBrokerSupplier_ApplicationPortal_1;
import loan.LoanApplication.BuyerBrokerSupplier.channels.ApplicationPortal.BuyerBrokerSupplier_ApplicationPortal_4;
import loan.LoanApplication.BuyerBrokerSupplier.roles.ApplicationPortal;
import org.scribble.net.Buf;
import org.scribble.net.ObjectStreamFormatter;
import org.scribble.net.scribsock.ScribServerSocket;
import org.scribble.net.scribsock.SocketChannelServer;
import org.scribble.net.session.MPSTEndpoint;
import org.scribble.net.session.SocketChannelEndpoint;
public class LoanApplicationPortal
{
public static void main(String[] args) throws Exception
{
BuyerBrokerSupplier sess = new BuyerBrokerSupplier();
try (
ScribServerSocket ss = new SocketChannelServer(8888);
MPSTEndpoint<BuyerBrokerSupplier, ApplicationPortal> se
= new MPSTEndpoint<>(sess, ApplicationPortal, new ObjectStreamFormatter()))
{
se.accept(ss, Applicant);
se.connect(ProcessingDept, SocketChannelEndpoint::new, "localhost", 7777);
se.connect(FinanceDept, SocketChannelEndpoint::new, "localhost", 9999);
Buf<String> customerName = new Buf<>();
Buf<String> dateOfBirth = new Buf<>();
Buf<Integer> annualSalary = new Buf<>();
Buf<Integer> creditRating = new Buf<>();
Buf<Boolean> response = new Buf<>();
BuyerBrokerSupplier_ApplicationPortal_4 s4
= new BuyerBrokerSupplier_ApplicationPortal_1(se)
.receive(Applicant, applyForLoan, customerName, dateOfBirth, annualSalary, creditRating)
.send(ProcessingDept, checkEligibility, customerName.val, dateOfBirth.val, annualSalary.val, creditRating.val)
.receive(ProcessingDept
, respond, response);
if (response.val)
{
Buf<Integer> loan = new Buf<>();
s4.send(FinanceDept, getLoanAmount, 789)
.receive(FinanceDept, sendLoanAmount, loan)
.send(Applicant, requestConfirmation, loan.val);
}
else
{
s4.send(FinanceDept, reject)
.send(Applicant, reject);
}
}
}
}