package travel; import java.io.IOException; import java.util.concurrent.ExecutionException; import org.scribble.main.ScribbleRuntimeException; 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; import travel.Travel.Booking.Booking; import travel.Travel.Booking.channels.A.Booking_A_1; import travel.Travel.Booking.channels.A.Booking_A_1_Cases; import travel.Travel.Booking.roles.A; public class BookingA { public static void main(String[] args) throws IOException, ScribbleRuntimeException, ExecutionException, InterruptedException { try (ScribServerSocket ss_C = new SocketChannelServer(7777)) { while (true) { int quote = 1000; Booking booking = new Booking(); try (MPSTEndpoint<Booking, A> se = new MPSTEndpoint<>(booking, Booking.A, new ObjectStreamFormatter())) { se.accept(ss_C, Booking.C); //Thread.sleep(1000); // FIXME: ensure S is ready se.connect(Booking.S, SocketChannelEndpoint::new, "localhost", 9999); Booking_A_1 s1 = new Booking_A_1(se); Booking_A_1_Cases s1cases; X: while (true) { s1cases = s1.branch(Booking.C); switch (s1cases.op) { case Query: s1 = s1cases.receive(Booking.Query) .send(Booking.C, Booking.Quote, quote -= 100) .send(Booking.S, Booking.Dummy); break; case No: s1cases.receive(Booking.No) .send(Booking.S, Booking.No) .receive(Booking.C, Booking.Bye); break X; case Yes: System.out.println("Yes: "); s1cases.receive(Booking.Yes) .send(Booking.S, Booking.Yes) .receive(Booking.C, Booking.Bye); break X; } } System.out.println("Done:"); } catch (Exception e) { e.printStackTrace(); } } } } }