aboutsummaryrefslogtreecommitdiff
path: root/src/Probe.java
diff options
context:
space:
mode:
authorjestin2002-09-27 17:26:26 +0000
committerjestin2002-09-27 17:26:26 +0000
commit55f376e0acf3a6dea0da68f480c945afa7952abb (patch)
tree3180395587fd45c9517f294cb7cbe548d0af736b /src/Probe.java
parent5c383e10a0fd1e6f742ba52895bb08a3965c1cc8 (diff)
downloadivy-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.java57
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)+"] ";
+ }
+
}