diff options
author | jestin | 2002-09-27 17:26:26 +0000 |
---|---|---|
committer | jestin | 2002-09-27 17:26:26 +0000 |
commit | 55f376e0acf3a6dea0da68f480c945afa7952abb (patch) | |
tree | 3180395587fd45c9517f294cb7cbe548d0af736b /src/Probe.java | |
parent | 5c383e10a0fd1e6f742ba52895bb08a3965c1cc8 (diff) | |
download | ivy-java-55f376e0acf3a6dea0da68f480c945afa7952abb.zip ivy-java-55f376e0acf3a6dea0da68f480c945afa7952abb.tar.gz ivy-java-55f376e0acf3a6dea0da68f480c945afa7952abb.tar.bz2 ivy-java-55f376e0acf3a6dea0da68f480c945afa7952abb.tar.xz |
see TODO for details. Mostly bugfixes.
Diffstat (limited to 'src/Probe.java')
-rw-r--r-- | src/Probe.java | 57 |
1 files changed, 44 insertions, 13 deletions
diff --git a/src/Probe.java b/src/Probe.java index a0a2ed0..c72c2ad 100644 --- a/src/Probe.java +++ b/src/Probe.java @@ -5,14 +5,16 @@ import gnu.getopt.Getopt; /** * terminal implementation in java of the ivyprobe. - * For a graphical version, see TestIvySwing - * @see fr.dgac.ivy.TestIvySwing * @author Yannick Jestin * @author <a href="http://www.tls.cena.fr/products/ivy/">http://www.tls.cena.fr/products/ivy/</a> * * * Changelog: - * 1.0.12 + * 1.2.1 + * - new -t switch to print the date for each ivy message + * - now displays the correct domain list + * - now has .bind and .unbind commands + * 1.2.0 * - Probe can now send empty strings on keyboard input * - rewritten with a looping thread on stdin to allow a cleaner exit on die * message : not very good @@ -29,12 +31,13 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { /** * help message for the standalone program */ - public static final String helpCommands = "Available commands:\n.die CLIENTNAME sends a die message\n.bye quits the application\n.quit idem\n.list lists the available clients\n.ping sends a ping request if IVY_PING is enabled"; - public static final String helpmsg = "usage: java fr.dgac.ivy.Probe [options] [regexp]\n\t-b BUS\tspecifies the Ivy bus domain\n\t-n ivyname (default JPROBE)\n\t-q\tquiet, no tty output\n\t-d\tdebug\n\t-h\thelp\n\n\t regexp is a Perl5 compatible regular expression"; + public static final String helpCommands = "Available commands:\n.die CLIENTNAME sends a die message\n.bye quits the application\n.quit idem\n.list lists the available clients\n.ping sends a ping request if IVY_PING is enabled\n.bind REGEXP binds to a regexp at runtime\n.unbind REGEXP unbinds to a regexp at runtime"; + public static final String helpmsg = "usage: java fr.dgac.ivy.Probe [options] [regexp]\n\t-b BUS\tspecifies the Ivy bus domain\n\t-n ivyname (default JPROBE)\n\t-q\tquiet, no tty output\n\t-d\tdebug\n\t-t\ttime stamp each message\n\t-h\thelp\n\n\t regexp is a Perl5 compatible regular expression"; public static void main(String[] args) throws IvyException { - Getopt opt = new Getopt("Probe",args,"n:b:dh"); + Getopt opt = new Getopt("Probe",args,"n:b:dht"); int c; + boolean timestamp=false; String domain=Ivy.getDomain(null); String name="JPROBE"; while ((c = opt.getopt()) != -1) switch (c) { @@ -44,6 +47,9 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { case 'n': name=opt.getOptarg(); break; + case 't': + timestamp=true; + break; case 'd': System.setProperty("IVY_DEBUG","yes"); break; @@ -52,13 +58,18 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { System.out.println(helpmsg); System.exit(0); } // getopt - Probe p = new Probe(); + Probe p = new Probe(timestamp); Ivy bus=new Ivy(name,name+" ready",p); for (int i=opt.getOptind();i<args.length;i++) { System.out.println("you want to subscribe to " + args[i]); bus.bindMsg(args[i],p); } - System.out.println("broadcasting on "+domain); + String s = "broadcasting on "; + Ivy.Domain[] d = bus.parseDomains(domain); + for (int index=0;index<d.length;index++) { + s+=d[index].getDomainaddr()+":"+d[index].getPort()+" "; + } + System.out.println(s); bus.start(domain); p.start(bus); } @@ -66,10 +77,12 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { private BufferedReader in; private volatile Thread looperThread; private Ivy bus; + private boolean timestamp; - Probe() { + Probe(boolean timestamp) { in = new BufferedReader(new InputStreamReader(System.in)); looperThread=new Thread(this); + this.timestamp=timestamp; } public void start(Ivy bus) { @@ -105,7 +118,7 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { // crude parsing of the ".xyz" commands // TODO use regexps instends of String.lastIndexOf(String) if (s.length()==0) { - System.out.println("-> Sent to " +bus.sendMsg(s)+" peers"); + System.out.println(date()+"-> Sent to " +bus.sendMsg(s)+" peers"); } else if (s.lastIndexOf(".die ")>=0){ String target=s.substring(5); Vector v=bus.getIvyClientsByName(target); @@ -115,6 +128,17 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { for (int i=0;i<v.size();i++) { ((IvyClient)v.elementAt(i)).sendDie(); } + } else if (s.lastIndexOf(".unbind ")>=0){ + String regexp=s.substring(8); + if (bus.unBindMsg(regexp)) { + System.out.println("you want to unsubscribe to " + regexp); + } else { + System.out.println("you can't unsubscribe to " + regexp + ", your're not subscribed to it"); + } + } else if (s.lastIndexOf(".bind ")>=0){ + String regexp=s.substring(6); + System.out.println("you want to subscribe to " + regexp); + bus.bindMsg(regexp,this); } else if (s.lastIndexOf(".ping ")>=0){ String target=s.substring(6); Vector v=bus.getIvyClientsByName(target); @@ -131,7 +155,7 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { Vector v = bus.getIvyClients(); System.out.println(v.size()+" clients on the bus"); for (int i=0;i<v.size();i++) { - System.out.println(" -> "+((IvyClient)v.elementAt(i)).getApplicationName()); + System.out.println("-> "+((IvyClient)v.elementAt(i)).getApplicationName()); } } else if ( s.lastIndexOf(".help")>=0) { System.out.println(helpCommands); @@ -139,7 +163,7 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { System.out.println("this command is not recognized"); System.out.println(helpCommands); } else { - System.out.println("-> Sent to " +bus.sendMsg(s)+" peers"); + System.out.println(date()+"-> Sent to " +bus.sendMsg(s)+" peers"); } } // parseCommand @@ -167,9 +191,16 @@ class Probe implements IvyApplicationListener, IvyMessageListener, Runnable { } public void receive(IvyClient client, String[] args) { - String s=client.getApplicationName() + " sent"; + String s=date()+client.getApplicationName() + " sent"; for (int i=0;i<args.length;i++) s+=" '"+args[i]+"'"; System.out.println(s); } + private String date() { + if (!timestamp) return ""; + Date d = new Date(); + java.text.DateFormat df = java.text.DateFormat.getTimeInstance(); + return "["+df.format(d)+"] "; + } + } |