Bug fix, WGET was not functional on inventory display due to missing httpresponse()
[IRC.git] / Robust / src / Tests / WebServerExample.java
1 /* Startup object is generated with the initialstate flag set by the
2  *  system to start the computation up */
3
4 // Create New ServerSocket
5 task Startup(StartupObject s {initialstate}) {
6         System.printString("W> Starting\n");
7         ServerSocket ss = new ServerSocket(9000);
8         System.printString("W> Creating ServerSocket\n");
9         Logger log = new Logger() {Initialize};
10         Inventory inventorylist = new Inventory(){TransInitialize};
11         taskexit(s {!initialstate}); /* Turns initial state flag off, so this task won't refire */
12 }
13
14 //Listen for a request and accept request 
15 task AcceptConnection(ServerSocket ss{SocketPending}) {
16         System.printString("W> Waiting for connection...\n");
17         WebServerSocket web = new WebServerSocket() {!WritePending, !TransPending};
18         ss.accept(web);
19         System.printString("W> Connected... \n");
20 }
21
22 // Process the incoming http request 
23 task ProcessRequest(WebServerSocket web{IOPending}) {
24         System.printString("W> Inside ProcessRequest... \n");
25         web.clientrequest();
26         if(web.checktrans()==false)
27                 // Not special transaction , do normal filesending      
28                 taskexit(web {WritePending, LogPending}); //Sets the WritePending and LogPending flag true 
29         else 
30                 // Invoke special inventory transaction
31                 taskexit(web {TransPending, LogPending});
32 }
33
34 //Do the WriteIO on server socket and send the requested file to Client
35 task SendFile(WebServerSocket web{WritePending}) {
36         System.printString("W> Inside SendFile ... \n");
37         web.sendfile();
38         web.close();
39         taskexit(web {!WritePending});
40 }
41
42 // Log the Client request
43 task LogRequest(WebServerSocket web{LogPending}, Logger log{Initialize}) {
44 //Task fired when both
45 // LogPending and Initialize flags are true 
46         System.printString("L > Inside logrequest\n");
47         log.logrequest(web.filename);
48         taskexit(web {!LogPending});
49 }
50
51 //Transaction on Inventory
52 task Transaction(WebServerSocket web{TransPending}, Inventory inventorylist{TransInitialize}){ //Task for WebServerTransactions
53         System.printString("T > Inside Transaction\n");
54         // Parse
55         int op = web.parseTransaction();
56         // Check for the kind of operation
57         if (op == 0 ) { /* Add */
58                 System.printString("DEBUG > Calling add transaction\n");
59                 Integer qty = new Integer(web.parsed[2]);
60                 Integer price = new Integer(web.parsed[3]);
61                 int ret = inventorylist.additem(web.parsed[1], qty.intValue(), price.intValue());
62                 if (ret == 0) {
63                         web.httpresponse();
64                         StringBuffer s = new StringBuffer("Added Item ");
65                         s.append(web.parsed[1]);
66                         s.append(" Quantity ");
67                         s.append(web.parsed[2]);
68                         s.append(" Price ");
69                         s.append(web.parsed[3]);
70                         s.append("\n");
71                         String towrite = new String(s);
72                         web.write(towrite.getBytes());
73                 } else {
74                         web.httpresponse();
75                         String s = new String("Error encountered");
76                         web.write(s.getBytes());
77                 }       
78         } else if (op == 1) { /* Buy */
79                 System.printString("DEBUG > Calling buy transaction\n");
80                 Integer qty = new Integer(web.parsed[2]);
81                 int ret = inventorylist.buyitem(web.parsed[1], qty.intValue());
82                 if (ret >= 0) {
83                         web.httpresponse();
84                         StringBuffer s = new StringBuffer("Bought item ");
85                         s.append(web.parsed[1]);
86                         s.append(" Quantity ");
87                         s.append(web.parsed[2]);
88                         s.append(" Cost ");
89                         Integer cost = new Integer(ret*qty.intValue());
90                         String c = cost.toString();
91                         s.append(c);
92                         String towrite = new String(s);
93                         web.write(towrite.getBytes());
94                 } else {
95                         web.httpresponse();
96                         String s = new String("Error encountered");
97                         web.write(s.getBytes());
98                 }
99         } else if (op == 2) { /* Inventory */
100                 System.printString("DEBUG > Calling inventory transaction\n");
101                 web.httpresponse();
102                 String towrite = inventorylist.inventory();     
103                 web.write(towrite.getBytes());
104         } else { /* Error */ 
105                 System.printString("T > Error - Unknown transaction\n");
106         }
107         //Invoke operations
108         web.close();
109         taskexit(web {!TransPending});
110 }