Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / jigsaw / src / org / w3c / www / protocol / http / micp / Probe.java
diff --git a/JMCR-Stable/real-world application/jigsaw/src/org/w3c/www/protocol/http/micp/Probe.java b/JMCR-Stable/real-world application/jigsaw/src/org/w3c/www/protocol/http/micp/Probe.java
new file mode 100644 (file)
index 0000000..9f38777
--- /dev/null
@@ -0,0 +1,256 @@
+// Probe.java\r
+// $Id: Probe.java,v 1.1 2010/06/15 12:21:48 smhuang Exp $  \r
+// (c) COPYRIGHT MIT and INRIA, 1997.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+\r
+package org.w3c.www.protocol.http.micp;\r
+\r
+import java.awt.Button;\r
+import java.awt.Color;\r
+import java.awt.Component;\r
+import java.awt.Container;\r
+import java.awt.Dimension;\r
+import java.awt.Frame;\r
+import java.awt.GridBagConstraints;\r
+import java.awt.GridBagLayout;\r
+import java.awt.Label;\r
+import java.awt.Panel;\r
+import java.awt.Window;\r
+\r
+import java.awt.event.ActionEvent;\r
+import java.awt.event.ActionListener;\r
+\r
+import java.net.DatagramPacket;\r
+import java.net.DatagramSocket;\r
+import java.net.InetAddress;\r
+import java.net.MulticastSocket;\r
+import java.net.UnknownHostException;\r
+\r
+import java.io.IOException;\r
+import java.io.PrintStream;\r
+\r
+import java.util.EventObject;\r
+\r
+/**\r
+ * A real piece of fun, try it !\r
+ */\r
+\r
+class Stats implements MICP {\r
+    int    queries = 0;\r
+    int    hits    = 0;\r
+    String lasturl = null;\r
+\r
+    final synchronized void handle(int op, String url) {\r
+       if (op == MICP_OP_QUERY)\r
+           queries++;\r
+       else\r
+           hits++;\r
+       lasturl = url;\r
+    }\r
+\r
+    final synchronized int getQueries() {\r
+       return queries;\r
+    }\r
+\r
+    final synchronized int getHits() {\r
+       return hits;\r
+    }\r
+\r
+    final synchronized String getLastURL() {\r
+       return lasturl;\r
+    }\r
+\r
+}\r
+\r
+class MICPReader extends Thread {\r
+    InetAddress     addr   = null;\r
+    int             port   = -1;\r
+    Stats           stats  = null;\r
+    MulticastSocket socket = null;\r
+    MICPReadWrite   micprw = null;\r
+\r
+    public void run() {\r
+       byte        buffer[] = new byte[4096];\r
+       MICPMessage msg      = new MICPMessage();\r
+       while ( true ) {\r
+           try {\r
+               DatagramPacket p = new DatagramPacket(buffer, buffer.length);\r
+               socket.receive(p);\r
+               micprw.decode(p.getData(), p.getLength(), msg);\r
+               // Stat that message:\r
+               stats.handle(msg.op, msg.url);\r
+           } catch (Exception ex) {\r
+               ex.printStackTrace();\r
+           } \r
+       }\r
+    }\r
+\r
+    MICPReader(InetAddress a, int port, Stats stats) \r
+       throws UnknownHostException, IOException\r
+    {\r
+       // Init:\r
+       this.micprw = new MICPReadWrite();\r
+       this.addr   = a;\r
+       this.port   = port;\r
+       this.stats  = stats;\r
+       // Create and join:\r
+       this.socket = new MulticastSocket(port);\r
+       this.socket.joinGroup(a);\r
+       // Run !\r
+       setName("mICP listener");\r
+       start();\r
+    }\r
+}\r
+\r
+public class Probe extends Panel implements Runnable, ActionListener {\r
+    MICPReader reader  = null;\r
+    Stats      stats   = null;\r
+    long       refresh = 500;\r
+\r
+    Label  hits    = null;\r
+    Label  queries = null;\r
+    Label  url     = null;\r
+    Button exit    = null;\r
+\r
+    /**\r
+     * ActionListener implementation - exit on exit button.\r
+     * @param e The event.\r
+     */\r
+\r
+    public void actionPerformed(ActionEvent e) {\r
+       if ( e.getSource() == exit ) {\r
+           System.out.println("Bye !");\r
+           System.exit(0);\r
+       }\r
+    }\r
+\r
+    protected synchronized void tick() {\r
+       try {\r
+           wait(refresh);\r
+       } catch (InterruptedException ex) {\r
+       }\r
+    }\r
+\r
+    public void run() {\r
+       while ( true ) {\r
+           // Display stats:\r
+           hits.setText(Integer.toString(stats.getHits()));\r
+           queries.setText(Integer.toString(stats.getQueries()));\r
+           url.setText(stats.getLastURL());\r
+           // Wait for interval:\r
+           tick();\r
+       }\r
+    }\r
+\r
+    public Probe(InetAddress addr, int port, long refresh) \r
+       throws UnknownHostException, IOException\r
+    {\r
+       // Create objects:\r
+       this.refresh = refresh;\r
+       this.stats   = new Stats();\r
+       this.reader  = new MICPReader(addr, port, stats);\r
+       // Create widgets:\r
+       GridBagLayout      gb = new GridBagLayout();\r
+       setLayout(gb);\r
+       GridBagConstraints ct = new GridBagConstraints();\r
+       GridBagConstraints cv = new GridBagConstraints();\r
+       // Create the title constraints:\r
+       ct         = new GridBagConstraints() ;\r
+       ct.gridx   = GridBagConstraints.RELATIVE ;\r
+       ct.anchor  = GridBagConstraints.EAST ;\r
+       ct.weighty = 1.0 ;\r
+       // Create the value constraints:\r
+       cv           = new GridBagConstraints() ;\r
+       cv.gridx     = GridBagConstraints.RELATIVE ;\r
+       cv.gridwidth = GridBagConstraints.REMAINDER ;\r
+       cv.fill      = GridBagConstraints.HORIZONTAL ;\r
+       cv.anchor    = GridBagConstraints.WEST ;\r
+       cv.weightx   = 1.0 ;\r
+       cv.weighty   = 1.0 ;\r
+       // Add the number of queries label:\r
+       Label title = new Label("queries");\r
+       gb.setConstraints(title, ct);\r
+       add(title);\r
+       queries = new Label("0");\r
+       queries.setBackground(Color.white);\r
+       gb.setConstraints(queries, cv);\r
+       add(queries);\r
+       // Add the number of hits label:\r
+       title = new Label("hits");\r
+       gb.setConstraints(title, ct);\r
+       add(title);\r
+       hits = new Label("0");\r
+       hits.setBackground(Color.white);\r
+       gb.setConstraints(hits, cv);\r
+       add(hits);\r
+       // Add the last url label:\r
+       title = new Label("url");\r
+       gb.setConstraints(title, ct);\r
+       add(title);\r
+       url = new Label("0");\r
+       url.setBackground(Color.white);\r
+       gb.setConstraints(url, cv);\r
+       add(url);\r
+       // Add the exit button:\r
+       exit = new Button("Exit");\r
+       exit.addActionListener(this);\r
+       gb.setConstraints(exit, ct);\r
+       add(exit);\r
+    }\r
+\r
+    public static void usage() {\r
+       PrintStream p = System.out;\r
+       p.println("Probe -a <addr> -p <port> -r <refresh>"\r
+                 + " -w <width> -h <height>");\r
+       p.println("\taddr: multicast group address");\r
+       p.println("\tport: multicast port");\r
+       p.println("\trefresh: refresh interval in ms");\r
+       p.println("\twidth: width at startup (pixels)");\r
+       p.println("\theight: height at startup (pixels)");\r
+       System.exit(1);\r
+    }\r
+\r
+    public static void main(String args[]) {\r
+       InetAddress addr    = null;\r
+       int         port    = -1;\r
+       long        refresh = 500;\r
+       int         width   = 330;\r
+       int         height  = 130;\r
+       try {\r
+           for (int i = 0 ; i < args.length ; i++) {\r
+               if ( args[i].equals("-a") && (i+1 < args.length) ) {\r
+                   addr = InetAddress.getByName(args[++i]);\r
+               } else if ( args[i].equals("-p") && (i+1 < args.length) ) {\r
+                   port = Integer.parseInt(args[++i]);\r
+               } else if ( args[i].equals("-r") && (i+1 < args.length) ) {\r
+                   refresh = Long.parseLong(args[++i]);\r
+               } else if ( args[i].equals("-w") && (i+1 < args.length) ) {\r
+                   width = Integer.parseInt(args[++i]);\r
+               } else if ( args[i].equals("-h") && (i+1 < args.length) ) {\r
+                   height = Integer.parseInt(args[++i]);\r
+               } else {\r
+                   usage();\r
+               } \r
+           }\r
+       } catch (Exception ex) {\r
+           usage();\r
+       }\r
+       // Check args:\r
+       if ((addr == null) || (port == -1))\r
+           usage();\r
+       // Run it:\r
+       Probe probe = null;\r
+       try {\r
+           probe = new Probe(addr, port, refresh);\r
+       } catch (Exception ex) {\r
+           ex.printStackTrace();\r
+           System.exit(1);\r
+       }\r
+       Frame toplevel = new Frame("mICP-Probe") ;\r
+       toplevel.add ("Center", probe) ;\r
+       toplevel.setSize(new Dimension(width, height));\r
+       toplevel.show() ;\r
+       new Thread(probe).start();\r
+    }\r
+\r
+}\r