start of new file
[IRC.git] / Robust / src / Benchmarks / Conglomerator / Tag / Opt / WebServerExampleOpt.java
1 /* Startup object is generated with the initialstate flag set by the
2  *  system to start the computation up */
3
4 task Startup(StartupObject s {initialstate}) {
5         ServerSocket ss = new ServerSocket(9000);
6         Logger log = new Logger() {Initialize};
7         Inventory inventorylist = new Inventory(){TransInitialize};
8         taskexit(s {!initialstate}); /* Turns initial state flag off, so this task won't refire */
9 }
10
11 task LookupS(Stock l{initialstate}) {
12     l.doLookup();
13     taskexit(l{!initialstate, query});
14 }
15
16 task ReceiveQueryS(Stock l{query&&IOPending}) {
17     if (l.Receive()) taskexit(l{!query,done}{}); else taskexit;
18 }
19
20 task LookupW(Weather l{initialstate}) {
21     l.doLookup();
22     taskexit(l{!initialstate, query});
23 }
24
25 task ReceiveQueryW(Weather l{query&&IOPending}) {
26     if (l.Receive()) taskexit(l{!query,done}{}); else taskexit;
27 }
28
29 task LookupG(Google l{initialstate}) {
30     l.doLookup();
31     taskexit(l{!initialstate, query});
32 }
33
34 task ReceiveQueryG(Google l{query&&IOPending}) {
35     if (l.Receive()) taskexit(l{!query,done}{}); else taskexit;
36 }
37
38 task AcceptConnection(ServerSocket ss{SocketPending}) {
39     tag t=new tag(link);
40     WebServerSocket web = new WebServerSocket() {!WritePending, !TransPending, WebInitialize}{t};
41     MySocket ms=new MySocket(){}{t};
42     ss.accept(ms);
43 }
44
45 task ProcessRequest(WebServerSocket web{WebInitialize}{link l}, MySocket s{IOPending}{link l}) {
46         if (web.clientrequest(s)) {
47             if(web.checktrans()==false)
48                 taskexit(web {WritePending, LogPending,!WebInitialize});
49             else {
50                 Weather w=new Weather(){initialstate}{l};
51                 Google g=new Google(){initialstate}{l};
52                 Stock st=new Stock(){initialstate}{l};
53                 taskexit(web {TransPending, LogPending,!WebInitialize});
54             }
55         }
56 }
57
58 task SendFile(WebServerSocket web{WritePending}{link l}, MySocket s{}{link l}) {
59         web.sendfile(s);
60         s.close();
61         taskexit(web {!WritePending});
62 }
63
64 task LogRequest(WebServerSocket web{LogPending}, Logger log{Initialize}) {
65         log.logrequest(web.filename);
66         taskexit(web {!LogPending});
67 }
68
69 task Transaction(WebServerSocket web{TransPending}{link l}, optional Weather weather{done}{link l}, optional Google g{done}{link l}, MySocket s{}{link l}, optional Stock st{done}{link l}){
70         web.httpresponse(s);
71         s.write(("<html>").getBytes());
72         if (isavailable(weather))
73             s.write(weather.data.getBytes());
74         if (isavailable(g))
75             s.write(g.data.getBytes());
76         if (isavailable(st)) {
77             s.write(st.data.getBytes());
78         }
79         s.write(("</html>").getBytes());
80         s.close();
81         taskexit(web {!TransPending});
82 }