package travel;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import org.scribble.main.ScribbleRuntimeException;
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 travel.Travel.Booking.Booking;
import travel.Travel.Booking.channels.S.Booking_S_1;
import travel.Travel.Booking.channels.S.Booking_S_1_Cases;
import travel.Travel.Booking.roles.S;
public class BookingS
{
public static void main(String[] args) throws IOException, ScribbleRuntimeException, ExecutionException, InterruptedException
{
try (ScribServerSocket ss_C = new SocketChannelServer(8888);
ScribServerSocket ss_A = new SocketChannelServer(9999))
{
while (true)
{
Booking booking = new Booking();
try (MPSTEndpoint<Booking, S> se = new MPSTEndpoint<>(booking, Booking.S, new ObjectStreamFormatter()))
{
//S.register(Booking.A, ss_A);
se.accept(ss_C, Booking.C);
se.accept(ss_A, Booking.A);
Buf<String> payment = new Buf<>();
Booking_S_1 s1 = new Booking_S_1(se);
Booking_S_1_Cases s1cases;
X: while (true)
{
s1cases = s1.branch(Booking.A);
switch (s1cases.op)
{
case Dummy:
s1 = s1cases.receive(Booking.Dummy);
break;
case No:
s1cases.receive(Booking.No);
break X;
case Yes:
System.out.println("Yes: ");
s1cases.receive(Booking.Yes)
.receive(Booking.C, Booking.Payment, payment)
.send(Booking.C, Booking.Ack);
break X;
}
}
System.out.println("Done:");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}