package demo.fase17.travel2; import static demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2.A; import static demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2.C; import static demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2.S; import static demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2.accpt; import static demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2.port; import static demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2.query; import static demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2.quote; import static demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2.reject; import java.io.IOException; 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.ExplicitEndpoint; import org.scribble.net.session.SocketChannelEndpoint; import demo.fase17.travel2.TravelAgent2.TravelAgent2.TravelAgent2; import demo.fase17.travel2.TravelAgent2.TravelAgent2.channels.A.EndSocket; import demo.fase17.travel2.TravelAgent2.TravelAgent2.channels.A.TravelAgent2_A_1; import demo.fase17.travel2.TravelAgent2.TravelAgent2.channels.A.TravelAgent2_A_2_Cases; import demo.fase17.travel2.TravelAgent2.TravelAgent2.roles.A; public class Travel2A { public void run() throws Exception { try (ScribServerSocket ss = new SocketChannelServer(8888)) { while (true) { TravelAgent2 sess = new TravelAgent2(); try (ExplicitEndpoint<TravelAgent2, A> se = new ExplicitEndpoint<>(sess, A, new ObjectStreamFormatter())) { run( new TravelAgent2_A_1(se) .accept(C, ss) .branch(C)); } catch (ScribbleRuntimeException | IOException | ClassNotFoundException e) { e.printStackTrace(); } } } } private EndSocket run(TravelAgent2_A_2_Cases A2) throws Exception { Buf<Object> b = new Buf<>(); switch (A2.op) { case query: A2 = A2.receive(query, b).send(C, quote, 1234).branch(C); System.out.println("(A) query: " + b.val); return run(A2); case accpt: //EndSocket end = A2.receive(accpt, b); System.out.println("(A) yes: " + b.val); return end; return A2.receive(accpt).connect(S, SocketChannelEndpoint::new, "localhost", 9999) .receive(S, port, b).send(C, port, (Integer) b.val); case reject: return A2.receive(reject); default: throw new RuntimeException("Shouldn't get in here: " + A2.op); } } public static void main(String[] args) throws Exception { new Travel2A().run(); } }