package fib;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.concurrent.ExecutionException;
import org.scribble.main.ScribbleRuntimeException;
import org.scribble.net.Buf;
import org.scribble.net.ObjectStreamFormatter;
import org.scribble.net.session.MPSTEndpoint;
import org.scribble.net.session.SocketChannelEndpoint;
import fib.Fib.Adder.Adder;
import fib.Fib.Adder.channels.C.Adder_C_1;
import fib.Fib.Adder.channels.C.Adder_C_2;
import fib.Fib.Adder.channels.C.Adder_C_3;
import fib.Fib.Adder.roles.C;
public class FibClient
{
public static void main(String[] args) throws UnknownHostException, ScribbleRuntimeException, IOException, ClassNotFoundException, ExecutionException, InterruptedException
{
Buf<Integer> i1 = new Buf<>(0);
Buf<Integer> i2 = new Buf<>(1);
Adder adder = new Adder();
try (MPSTEndpoint<Adder, C> se = new MPSTEndpoint<>(adder, Adder.C, new ObjectStreamFormatter()))
{
se.connect(Adder.S, SocketChannelEndpoint::new, "localhost", 8888);
Adder_C_1 s1 = new Adder_C_1(se);
fib(s1, i1, i2, 0).receive(Adder.S, Adder.BYE);
}
}
private static Adder_C_3 fib(Adder_C_1 s1, Buf<Integer> i1, Buf<Integer> i2, int i) throws ClassNotFoundException, ScribbleRuntimeException, IOException, ExecutionException, InterruptedException
{
return (i < 20)
//? fib(side(s1.send(Adder.S, Adder.ADD, i1.val, i2.val), i1, i2).receive(Adder.RES, i2), i1, i2, i + 1)
? fib(side(s1.send(Adder.S, Adder.ADD, i1.val, i1.val = i2.val), i1, i2).receive(Adder.S, Adder.RES, i2), i1, i2, i + 1)
: s1.send(Adder.S, Adder.BYE);
}
private static Adder_C_2 side(Adder_C_2 s2, Buf<Integer> i1, Buf<Integer> i2)
{
System.out.print(i1.val + " ");
//i1.val = i2.val;
return s2;
}
}