package betty16.lec2.adder; import static betty16.lec2.adder.Adder.Adder.Adder.Bye; import static betty16.lec2.adder.Adder.Adder.Adder.C; import static betty16.lec2.adder.Adder.Adder.Adder.Res; import static betty16.lec2.adder.Adder.Adder.Adder.S; 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.MPSTEndpoint; import betty16.lec2.adder.Adder.Adder.Adder; import betty16.lec2.adder.Adder.Adder.channels.S.Adder_S_1; import betty16.lec2.adder.Adder.Adder.channels.S.Adder_S_1_Handler; import betty16.lec2.adder.Adder.Adder.channels.S.Adder_S_2; import betty16.lec2.adder.Adder.Adder.channels.S.Adder_S_3; import betty16.lec2.adder.Adder.Adder.ops.Add; import betty16.lec2.adder.Adder.Adder.ops.Bye; import betty16.lec2.adder.Adder.Adder.roles.S; public class AdderS2 implements Adder_S_1_Handler { public static void main(String[] args) throws Exception { try (ScribServerSocket ss = new SocketChannelServer(8888)) { while (true) { Adder adder = new Adder(); try (MPSTEndpoint<Adder, S> server = new MPSTEndpoint<>(adder, S, new ObjectStreamFormatter())) { server.accept(ss, C); new Adder_S_1(server).branch(C, new AdderS2()); } catch (ScribbleRuntimeException | IOException | ClassNotFoundException e) { e.printStackTrace(); } } } } @Override public void receive(Adder_S_2 s2, Add op, Buf<Integer> arg1, Buf<Integer> arg2) throws ScribbleRuntimeException, IOException, ClassNotFoundException { s2.send(C, Res, arg1.val + arg2.val).branch(C, this); } @Override public void receive(Adder_S_3 s3, Bye op) throws ScribbleRuntimeException, IOException { s3.send(C, Bye); } }