package exercise.voting;
import java.io.IOException;
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 exercise.voting.EProtocol.EVoting.EVoting;
import exercise.voting.EProtocol.EVoting.channels.S.EVoting_S_1;
import exercise.voting.EProtocol.EVoting.channels.S.EVoting_S_3_Cases;
import exercise.voting.EProtocol.EVoting.channels.S.EVoting_S_4;
import exercise.voting.EProtocol.EVoting.roles.S;
public class Server
{
public static void main(String[] args) throws IOException, ScribbleRuntimeException, ExecutionException, InterruptedException, ClassNotFoundException
{
EVoting vp = new EVoting();
try (MPSTEndpoint<EVoting, S> se = new MPSTEndpoint<>(vp, EVoting.S, new ObjectStreamFormatter()))
{
se.connect(EVoting.S, SocketChannelEndpoint::new, "localhost", 8888);
EVoting_S_1 s1 = new EVoting_S_1(se);
Buf<String> name = new Buf<>();
EVoting_S_3_Cases cases = s1.receive(EVoting.V, EVoting.Authenticate, name)
.send(EVoting.V, EVoting.Ok, name.val).branch(EVoting.V);
Buf<String> vote = new Buf<>();
EVoting_S_4 s2 = null;
switch(cases.op){
case No: s2 = cases.receive(EVoting.V, EVoting.No, vote); break;
case Yes: s2 = cases.receive(EVoting.V, EVoting.No, vote); break;
}
s2.send(EVoting.V, EVoting.Result, new Integer(1));
System.out.printf("Done: ~s", vote.val);
} catch (Exception e)
{
e.printStackTrace();
}
}
}