package bettybook.http.longv; import static bettybook.http.longv.HttpLong.Http.Http.AcceptR; 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.ContentL; import static bettybook.http.longv.HttpLong.Http.Http.ContentT; import static bettybook.http.longv.HttpLong.Http.Http.Date; import static bettybook.http.longv.HttpLong.Http.Http.ETag; import static bettybook.http.longv.HttpLong.Http.Http.HttpV; import static bettybook.http.longv.HttpLong.Http.Http.LastM; import static bettybook.http.longv.HttpLong.Http.Http.S; import static bettybook.http.longv.HttpLong.Http.Http.Server; import static bettybook.http.longv.HttpLong.Http.Http.StrictTS; import static bettybook.http.longv.HttpLong.Http.Http.Vary; import static bettybook.http.longv.HttpLong.Http.Http.Via; import static bettybook.http.longv.HttpLong.Http.Http._200; import static bettybook.http.longv.HttpLong.Http.Http._404; import org.scribble.net.Buf; import org.scribble.net.session.MPSTEndpoint; import org.scribble.net.session.SocketChannelEndpoint; import bettybook.http.longv.HttpLong.Http.Http; import bettybook.http.longv.HttpLong.Http.channels.C.EndSocket; import bettybook.http.longv.HttpLong.Http.channels.C.Http_C_1; import bettybook.http.longv.HttpLong.Http.channels.C.Http_C_3; import bettybook.http.longv.HttpLong.Http.channels.C.Http_C_4_Cases; import bettybook.http.longv.HttpLong.Http.channels.C.Http_C_5; import bettybook.http.longv.HttpLong.Http.channels.C.Http_C_5_Cases; import bettybook.http.longv.HttpLong.Http.roles.C; import bettybook.http.longv.message.Body; import bettybook.http.longv.message.HttpLongMessageFormatter; import bettybook.http.longv.message.client.Host; import bettybook.http.longv.message.client.RequestLine; public class HttpLongC { public static void main(String[] args) throws Exception { Http http = new Http(); try (MPSTEndpoint<Http, C> client = new MPSTEndpoint<>(http, C, new HttpLongMessageFormatter())) { String host = "www.doc.ic.ac.uk"; int port = 80; //String host = "localhost"; int port = 8080; client.connect(S, SocketChannelEndpoint::new, host, port); new HttpLongC().run(new Http_C_1(client), host); } } public void run(Http_C_1 s1, String host) throws Exception { doResponse(doRequest(s1, host)); } private Http_C_3 doRequest(Http_C_1 s1, String host) throws Exception { return s1.send(S, new RequestLine("/~rhu/", "1.1")) .send(S, new Host(host)) .send(S, new Body("")); } private void doResponse(Http_C_3 s3) throws Exception { Http_C_4_Cases cases = s3.async(S, HttpV).branch(S); switch (cases.op) { case _200: doResponseAux(cases.receive(_200)); break; case _404: doResponseAux(cases.receive(_404)); break; default: throw new RuntimeException("[TODO]: " + cases.op); } } private EndSocket doResponseAux(Http_C_5 c5) throws Exception { Http_C_5_Cases cases = c5.branch(S); switch (cases.op) { case AcceptR: return doResponseAux(cases.receive(AcceptR)); case ContentL: return doResponseAux(cases.receive(ContentL)); case ContentT: return doResponseAux(cases.receive(ContentT)); case Date: return doResponseAux(cases.receive(Date)); case ETag: return doResponseAux(cases.receive(ETag)); case LastM: return doResponseAux(cases.receive(LastM)); case Server: return doResponseAux(cases.receive(Server)); case StrictTS: return doResponseAux(cases.receive(StrictTS)); case Vary: return doResponseAux(cases.receive(Vary)); case Via: return doResponseAux(cases.receive(Via)); case Body: { Buf<Body> buf_body = new Buf<>(); EndSocket end = cases.receive(Body, buf_body); System.out.println(buf_body.val.getBody()); return end; } default: throw new RuntimeException("[TODO]: " + cases.op); } } }