start of new file
[IRC.git] / Robust / src / Benchmarks / Conglomerator / Java / WebServerExample.java
1 public class WebServerExample extends Thread {
2 /* Startup object is generated with the initialstate flag set by the
3  *  system to start the computation up */
4     Logger log;
5     WebServerSocket web;
6     Socket s;
7
8     public WebServerExample(WebServerSocket web, Socket s, Logger log) {
9         this.web=web;
10         this.s=s;
11         this.log=log;
12     }
13
14     public static void main(String x[]) {
15         ServerSocket ss = new ServerSocket(9000);
16         Logger log = new Logger();
17         while(true) {
18             Socket s=ss.accept();
19             WebServerSocket web = new WebServerSocket();
20             WebServerExample wse=new WebServerExample(web, s, log);
21             wse.start();
22         }
23     }
24
25     public void doLookup(Lookup l) {
26         String query="GET /"+l.url+" HTTP/1.1\r\nConnection: close\r\nHost:"+l.hostname+"\r\n\r\n";
27         l.s=new Socket(l.hostname, 80);
28         l.s.write(query.getBytes());
29     }
30
31     public void ReceiveQuery(Lookup l) {
32         byte[] buffer=new byte[1024];
33         boolean cnt=true;
34
35         while(cnt) {
36             int numchars=l.s.read(buffer);
37             if (numchars<=0) {
38                 l.fix();
39                 l.s.close();
40                 return;
41             }
42             String str=new String(buffer, 0, numchars);
43             if (l.data==null) {
44                 l.data=str;
45             } else
46                 l.data=l.data+str;
47         }
48     }
49
50     public void run() {
51         ProcessRequest();
52     }
53
54     public void ProcessRequest() {
55         if (web.clientrequest(s)) {
56             if(web.checktrans()==false) {
57                 LogRequest();
58                 SendFile();
59             } else {
60                 Weather w=new Weather();
61                 Google g=new Google();
62                 Stock st=new Stock();
63                 doLookup(w);
64                 ReceiveQuery(w);
65                 doLookup(g);
66                 ReceiveQuery(g);
67                 doLookup(st);
68                 ReceiveQuery(st);
69                 LogRequest();
70                 Transaction(w, g, st);
71             }
72         }
73     }
74
75     public void SendFile() {
76         web.sendfile(s);
77         s.close();
78     }
79
80     public void LogRequest() {
81         log.logrequest(web.filename);
82     }
83     
84     public void Transaction(Weather weather, Google g, Stock st){
85         web.httpresponse(s);
86         s.write(("<html>").getBytes());
87         s.write(weather.data.getBytes());
88         s.write(g.data.getBytes());
89         s.write(st.data.getBytes());
90         s.write(("</html>").getBytes());
91         s.close();
92     }
93 }