Adding JMCR-Stable version
[Benchmarks_CSolver.git] / JMCR-Stable / real-world application / jigsaw / src / org / w3c / www / mux / tests / MuxEcho.java
diff --git a/JMCR-Stable/real-world application/jigsaw/src/org/w3c/www/mux/tests/MuxEcho.java b/JMCR-Stable/real-world application/jigsaw/src/org/w3c/www/mux/tests/MuxEcho.java
new file mode 100644 (file)
index 0000000..016b0dd
--- /dev/null
@@ -0,0 +1,231 @@
+// MuxEcho.java\r
+// $Id: MuxEcho.java,v 1.1 2010/06/15 12:24:57 smhuang Exp $\r
+// (c) COPYRIGHT MIT and INRIA, 1996.\r
+// Please first read the full copyright statement in file COPYRIGHT.html\r
+\r
+package org.w3c.www.mux.tests;\r
+\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.io.OutputStream;\r
+import java.io.PrintStream;\r
+\r
+import java.net.ServerSocket;\r
+import java.net.Socket;\r
+\r
+import org.w3c.www.mux.MuxSession;\r
+import org.w3c.www.mux.MuxStream;\r
+import org.w3c.www.mux.MuxStreamHandler;\r
+\r
+class EchoServerStreamHandler implements MuxStreamHandler {\r
+\r
+    public boolean acceptSession(MuxStream stream, int sessid, int protid) {\r
+       System.out.println("EchoServerStreamHandler: accept "\r
+                          + sessid\r
+                          + " for protocol "\r
+                          + protid);\r
+       return true;\r
+    }\r
+\r
+    public void notifySession(MuxSession session) {\r
+       try {\r
+           new EchoServerHandler(session);\r
+       } catch (Exception ex) {\r
+           System.out.println("EchoServerStreamHandler: error !");\r
+           ex.printStackTrace();\r
+       }\r
+    }\r
+\r
+}\r
+\r
+// EchoServerHandler is the one handling the "echo" protocol \r
+// One instance runs per MuxSession on a single MuxStream.\r
+\r
+class EchoServerHandler extends Thread {\r
+    MuxSession   ses = null;\r
+    InputStream  in  = null;\r
+    OutputStream out = null;\r
+\r
+    public void run() {\r
+       byte buffer[] = new byte[1024];\r
+       int  got      = -1;\r
+       System.out.println(this+": now running !");\r
+       try {\r
+           while ((got = in.read(buffer, 0, buffer.length)) >= 0) {\r
+               System.out.println("< "\r
+                                   + this\r
+                                  + " ["+new String(buffer, 0, 0, got)+"]");\r
+               out.write(buffer, 0, got);\r
+               out.flush();\r
+           }\r
+       } catch (Exception ex) {\r
+           System.out.println(this+": fatal error, aborting.");\r
+           ex.printStackTrace();\r
+       }\r
+    }\r
+\r
+    public EchoServerHandler(MuxSession ses) \r
+       throws IOException\r
+    {\r
+       this.ses = ses;\r
+       this.in  = ses.getInputStream();\r
+       this.out = ses.getOutputStream();\r
+       setName("Echo@"+ses.getIdentifier());\r
+       start();\r
+    }\r
+\r
+}\r
+\r
+// The EchoServer is the one accepting new incomming connections:\r
+\r
+class EchoServer extends Thread {\r
+    ServerSocket            socket = null;\r
+    EchoServerStreamHandler handler = null;\r
+    int port = -1;\r
+\r
+    public void run() {\r
+       try {\r
+           while(true) {\r
+               System.out.println("EchoServer@localhost:"+port+": accept.");\r
+               Socket client = socket.accept();\r
+               new MuxStream(true, handler, client);\r
+           }\r
+       } catch (Exception ex) {\r
+           System.out.println("EchoServer: fatal error !");\r
+           ex.printStackTrace();\r
+       }\r
+    }\r
+\r
+    EchoServer(int port)\r
+       throws IOException\r
+    {\r
+       this.handler = new EchoServerStreamHandler();\r
+       this.socket  = new ServerSocket(port);\r
+       this.port    = port;\r
+       this.start();\r
+    }\r
+}\r
+\r
+class EchoClient extends Thread {\r
+    static Socket    socket = null;\r
+    static MuxStream stream = null;\r
+    String msg = null;\r
+    InputStream in=null;\r
+    OutputStream out =null;\r
+    MuxSession ses = null;\r
+    int id =-1;\r
+    int repeat = -1;\r
+\r
+    public void run() {\r
+       byte buffer[] = new byte[1024];\r
+       int  msgid    = 0;\r
+       try {\r
+           while((repeat < 0) || (repeat != 0)) {\r
+               String m = "["+id+"]"+(msgid++)+"/"+msg;\r
+               m.getBytes(0, m.length(), buffer, 0);\r
+               out.write(buffer, 0, m.length());\r
+               out.flush();\r
+               int got = in.read(buffer, 0, buffer.length);\r
+               System.out.println("> "\r
+                                   + this\r
+                                  + " ["+new String(buffer, 0, 0, got)+"]");\r
+               if ( repeat > 0 )\r
+                   repeat--;\r
+           }\r
+           out.close();\r
+       } catch (Exception ex) {\r
+           System.out.println(this+": failed.");\r
+           ex.printStackTrace();\r
+       }\r
+    }\r
+\r
+    public static void makeClients(String host, int port\r
+                                  , int count\r
+                                  , int repeat\r
+                                  , String msg)\r
+       throws IOException\r
+    {\r
+       // Init if needed:\r
+       if ( socket == null ) {\r
+           socket = new Socket(host, port);\r
+           stream = new MuxStream(false, null, socket);\r
+       }\r
+       // Start as many echo sessions as needed:\r
+       while (--count >= 0) \r
+           new EchoClient(stream, count, repeat, msg);\r
+    }\r
+\r
+    EchoClient(MuxStream stream, int id, int repeat, String msg)\r
+       throws IOException\r
+    {\r
+       this.ses    = stream.connect(7);\r
+       this.in     = ses.getInputStream();\r
+       this.out    = ses.getOutputStream();\r
+       this.msg    = msg;\r
+       this.id     = id;\r
+       this.repeat = repeat;\r
+       setName("client/"+id);\r
+       start();\r
+    }\r
+}\r
+\r
+public class MuxEcho {\r
+\r
+    public static void usage() {\r
+       System.out.println("-s (server) -p port");\r
+       System.out.println("-c (client) -m msg -h server -p port -n count -r repeat");\r
+    }\r
+\r
+    public static void main(String args[]) {\r
+       boolean server = false;\r
+       String host = null;\r
+       String msg = null;\r
+       int port = 5001;\r
+       int count = 2;\r
+       int repeat = 0;\r
+\r
+       for (int i = 0 ; i < args.length ; i++) {\r
+           if ( args[i].equals("-s") ) {\r
+               server = true;\r
+           } else if (args[i].equals("-c") ) {\r
+               server = false;\r
+           } else if (args[i].equals("-m")) {\r
+               msg = args[++i];\r
+           } else if (args[i].equals("-h") ) {\r
+               host = args[++i];\r
+           } else if (args[i].equals("-p")) {\r
+               try {\r
+                   port = Integer.parseInt(args[++i]);\r
+               } catch (Exception ex) {\r
+                   usage();\r
+               }\r
+           } else if (args[i].equals("-n")) {\r
+               try {\r
+                   count = Integer.parseInt(args[++i]);\r
+               } catch (Exception ex) {\r
+                   usage();\r
+               }\r
+           } else if (args[i].equals("-r")) {\r
+               try {\r
+                   repeat = Integer.parseInt(args[++i]);\r
+               } catch (Exception ex) {\r
+                   usage();\r
+               }\r
+           } else {\r
+               usage();\r
+           }\r
+       }\r
+       try {\r
+           if ( server ) {\r
+               new EchoServer(port);\r
+           } else {\r
+               EchoClient.makeClients(host, port, count, repeat, msg);\r
+           }\r
+       } catch (Exception ex) {\r
+           ex.printStackTrace();\r
+       }\r
+           \r
+\r
+    }\r
+\r
+}\r