package bettybook.http.longv;
import static bettybook.http.longv.HttpLong.Http.Http.Accept;
import static bettybook.http.longv.HttpLong.Http.Http.AcceptE;
import static bettybook.http.longv.HttpLong.Http.Http.AcceptL;
import static bettybook.http.longv.HttpLong.Http.Http.Body;
import static bettybook.http.longv.HttpLong.Http.Http.C;
import static bettybook.http.longv.HttpLong.Http.Http.Connection;
import static bettybook.http.longv.HttpLong.Http.Http.DNT;
import static bettybook.http.longv.HttpLong.Http.Http.Host;
import static bettybook.http.longv.HttpLong.Http.Http.RequestL;
import static bettybook.http.longv.HttpLong.Http.Http.S;
import static bettybook.http.longv.HttpLong.Http.Http.UserA;
import static bettybook.http.longv.HttpLong.Http.Http.UpgradeIR;
import java.io.IOException;
import org.scribble.main.ScribbleRuntimeException;
import org.scribble.net.Buf;
import org.scribble.net.scribsock.ScribServerSocket;
import org.scribble.net.scribsock.SocketChannelServer;
import org.scribble.net.session.MPSTEndpoint;
import bettybook.http.longv.HttpLong.Http.Http;
import bettybook.http.longv.HttpLong.Http.channels.S.Http_S_1;
import bettybook.http.longv.HttpLong.Http.channels.S.Http_S_2;
import bettybook.http.longv.HttpLong.Http.channels.S.Http_S_2_Cases;
import bettybook.http.longv.HttpLong.Http.roles.S;
import bettybook.http.longv.message.Body;
import bettybook.http.longv.message.HttpLongMessageFormatter;
import bettybook.http.longv.message.server.ContentLength;
import bettybook.http.longv.message.server.HttpVersion;
import bettybook.http.longv.message.server._200;
public class HttpLongS
{
public static void main(String[] args) throws Exception
{
try (ScribServerSocket ss = new SocketChannelServer(8080)) {
while (true) {
Http http = new Http();
try (MPSTEndpoint<Http, S> server = new MPSTEndpoint<>(http, S, new HttpLongMessageFormatter())) {
server.accept(ss, C);
run(new Http_S_1(server));
}
catch (IOException | ClassNotFoundException | ScribbleRuntimeException e)
{
e.printStackTrace();
}
}
}
}
private static void run(Http_S_1 s1) throws ClassNotFoundException, ScribbleRuntimeException, IOException {
Buf<Object> buf = new Buf<>();
Http_S_2 s2 = s1.receive(C, RequestL, buf);
System.out.println("Requested: " + buf.val);
Y: while (true) {
Http_S_2_Cases cases = s2.branch(C);
switch (cases.op) {
case Accept: s2 = cases.receive(Accept, buf); break;
case AcceptE: s2 = cases.receive(AcceptE, buf); break;
case AcceptL: s2 = cases.receive(AcceptL, buf); break;
case Body:
{
String body = "<html><body>Hello, World!</body></html>";
cases.receive(Body, buf)
.send(C, new HttpVersion("1.1"))
.send(C, new _200("OK"))
.send(C, new ContentLength(body.length()))
.send(C, new Body(body));
break Y;
}
case Connection: s2 = cases.receive(Connection, buf); break;
case DNT: s2 = cases.receive(DNT, buf); break;
case UpgradeIR: s2 = cases.receive(UpgradeIR, buf); break;
case Host: s2 = cases.receive(Host, buf); break;
case UserA: s2 = cases.receive(UserA, buf); break;
}
}
}
}