package betty16.lec2.adder;
import static betty16.lec2.adder.Adder.Adder.Adder.Add;
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 org.scribble.net.Buf;
import org.scribble.net.ObjectStreamFormatter;
import org.scribble.net.session.MPSTEndpoint;
import org.scribble.net.session.SocketChannelEndpoint;
import betty16.lec2.adder.Adder.Adder.Adder;
import betty16.lec2.adder.Adder.Adder.channels.C.Adder_C_1;
import betty16.lec2.adder.Adder.Adder.roles.C;
public class AdderC2 {
public static void main(String[] args) throws Exception {
Adder adder = new Adder();
try (MPSTEndpoint<Adder, C> client = new MPSTEndpoint<>(adder, C, new ObjectStreamFormatter())) {
client.connect(S, SocketChannelEndpoint::new, "localhost", 8888);
System.out.println("C: " + new AdderC2().run(client));
}
}
private int run(MPSTEndpoint<Adder, C> client) throws Exception {
Buf<Integer> i = new Buf<>(1);
Adder_C_1 s1 = new Adder_C_1(client);
for (int j = 0; j < 10; j++) {
s1 = s1.send(S, Add, i.val, i.val).receive(S, Res, i);
}
s1.send(S, Bye).receive(S, Bye);
return i.val;
}
}