1 /* Startup object is generated with the initialstate flag set by the
2 * system to start the computation up */
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 */
11 task LookupS(Stock l{initialstate}) {
13 taskexit(l{!initialstate, query});
16 task ReceiveQueryS(Stock l{query&&IOPending}) {
17 if (l.Receive()) taskexit(l{!query,done}{}); else taskexit;
20 task LookupW(Weather l{initialstate}) {
22 taskexit(l{!initialstate, query});
25 task ReceiveQueryW(Weather l{query&&IOPending}) {
26 if (l.Receive()) taskexit(l{!query,done}{}); else taskexit;
29 task LookupG(Google l{initialstate}) {
31 taskexit(l{!initialstate, query});
34 task ReceiveQueryG(Google l{query&&IOPending}) {
35 if (l.Receive()) taskexit(l{!query,done}{}); else taskexit;
38 task AcceptConnection(ServerSocket ss{SocketPending}) {
40 WebServerSocket web = new WebServerSocket() {!WritePending, !TransPending, WebInitialize}{t};
41 MySocket ms=new MySocket(){}{t};
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});
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});
58 task SendFile(WebServerSocket web{WritePending}{link l}, MySocket s{}{link l}) {
61 taskexit(web {!WritePending});
64 task LogRequest(WebServerSocket web{LogPending}, Logger log{Initialize}) {
65 log.logrequest(web.filename);
66 taskexit(web {!LogPending});
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}){
71 s.write(("<html>").getBytes());
72 if (isavailable(weather))
73 s.write(weather.data.getBytes());
75 s.write(g.data.getBytes());
76 if (isavailable(st)) {
77 s.write(st.data.getBytes());
79 s.write(("</html>").getBytes());
81 taskexit(web {!TransPending});