package http.longvers; import org.scribble.net.Buf; import org.scribble.net.scribsock.ScribServerSocket; import org.scribble.net.scribsock.SocketChannelServer; import org.scribble.net.session.MPSTEndpoint; import http.longvers.HttpLong.Http.Http; import http.longvers.HttpLong.Http.channels.S.Http_S_1; import http.longvers.HttpLong.Http.channels.S.Http_S_2; import http.longvers.HttpLong.Http.channels.S.Http_S_2_Cases; import http.longvers.HttpLong.Http.roles.S; import http.longvers.message.Body; import http.longvers.message.HttpLongMessageFormatter; import http.longvers.message.client.Accept; import http.longvers.message.client.AcceptEncoding; import http.longvers.message.client.AcceptLanguage; import http.longvers.message.client.Connection; import http.longvers.message.client.DoNotTrack; import http.longvers.message.client.Host; import http.longvers.message.client.RequestLine; import http.longvers.message.client.UpgradeInsecureRequests; import http.longvers.message.client.UserAgent; import http.longvers.message.server.ContentLength; import http.longvers.message.server.HttpVersion; import http.longvers.message.server._200; public class HttpLongS { public HttpLongS() { } public static void main(String[] args) throws Exception { Buf<RequestLine> b_reql = new Buf<>(); Buf<Host> b_host = new Buf<>(); Buf<UserAgent> b_usera = new Buf<>(); Buf<Accept> b_acc = new Buf<>(); Buf<AcceptLanguage> b_accl = new Buf<>(); Buf<AcceptEncoding> b_acce = new Buf<>(); Buf<DoNotTrack> b_dnt = new Buf<>(); Buf<Connection> b_conn = new Buf<>(); Buf<UpgradeInsecureRequests> b_upgradeir = new Buf<>(); Buf<Body> b_body = new Buf<>(); try (ScribServerSocket ss = new SocketChannelServer(8080)) { while (true) { Http http = new Http(); try (MPSTEndpoint<Http, S> se = new MPSTEndpoint<>(http, Http.S, new HttpLongMessageFormatter())) { se.accept(ss, Http.C); Http_S_1 s1 = new Http_S_1(se); Http_S_2 s2 = s1.receive(Http.C, Http.REQUESTL, b_reql); System.out.println("Requested: " + b_reql.val); X: while (true) { Http_S_2_Cases s2cases = s2.branch(Http.C); switch (s2cases.op) { case ACCEPT: { s2 = s2cases.receive(Http.ACCEPT, b_acc); break; } case ACCEPTE: { s2 = s2cases.receive(Http.ACCEPTE, b_acce); break; } case ACCEPTL: { s2 = s2cases.receive(Http.ACCEPTL, b_accl); break; } case BODY: { //String body = ""; String body = "<html><body>Hello, world!</body></html>"; s2cases.receive(Http.BODY, b_body) .send(Http.C, new HttpVersion("1.1")) .send(Http.C, new _200("OK")) .send(Http.C, new ContentLength(body.length())) .send(Http.C, new Body(body)); break X; } case CONNECTION: { s2 = s2cases.receive(Http.CONNECTION, b_conn); break; } case DNT: { s2 = s2cases.receive(Http.DNT, b_dnt); break; } case UPGRADEIR: { s2 = s2cases.receive(Http.UPGRADEIR, b_upgradeir); break; } case HOST: { s2 = s2cases.receive(Http.HOST, b_host); break; } case USERA: { s2 = s2cases.receive(Http.USERA, b_usera); break; } } } } } } } }