package coco.fibo;
import static coco.fibo.Fibo.Fibonacci.Fibonacci.A;
import static coco.fibo.Fibo.Fibonacci.Fibonacci.B;
import static coco.fibo.Fibo.Fibonacci.Fibonacci.fibonacci;
import static coco.fibo.Fibo.Fibonacci.Fibonacci.stop;
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 coco.fibo.Fibo.Fibonacci.Fibonacci;
import coco.fibo.Fibo.Fibonacci.channels.B.EndSocket;
import coco.fibo.Fibo.Fibonacci.channels.B.Fibonacci_B_1;
import coco.fibo.Fibo.Fibonacci.channels.B.Fibonacci_B_1_Cases;
import coco.fibo.Fibo.Fibonacci.roles.B;
public class FiboB extends Thread
{
private final Fibonacci fib;
private Buf<Long> b = new Buf<>(1L);
public FiboB(Fibonacci fib)
{
this.fib = fib;
}
@Override
public void run()
{
try (
ScribServerSocket ss = new SocketChannelServer(8888);
MPSTEndpoint<Fibonacci, B> se = new MPSTEndpoint<>(this.fib, B, new ObjectStreamFormatter()))
{
se.accept(ss, A);
run(new Fibonacci_B_1(se));
}
catch (Exception x)
{
x.printStackTrace();
}
}
private EndSocket run(Fibonacci_B_1 s) throws Exception
{
/*
... s.branch(A);
switch (...) // Value-switch
{
...
}
}
}
/*/
Fibonacci_B_1_Cases c = s.branch(A);
switch (c.op)
{
case fibonacci:
long prev = this.b.val;
return run(c.receive(fibonacci, this.b).send(A, fibonacci, this.b.val += prev));
case stop:
return c.receive(stop);
default:
throw new RuntimeException("Will never get here");
}
}
}
//*/