aboutsummaryrefslogtreecommitdiff
path: root/tests/TestNetSwing.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/TestNetSwing.java')
-rw-r--r--tests/TestNetSwing.java189
1 files changed, 81 insertions, 108 deletions
diff --git a/tests/TestNetSwing.java b/tests/TestNetSwing.java
index 3154457..7afbb0a 100644
--- a/tests/TestNetSwing.java
+++ b/tests/TestNetSwing.java
@@ -1,25 +1,29 @@
/**
* TestNetSwing , a network Ivy domain checker.
* @author Yannick Jestin <mailto:jestin@cena.fr>
+ *
* (c) CENA
- * A simple Swing application in order to check whether the chosen network is
- * OK
+ * A simple Swing application in order to check a network
+ *
+ * Changelog:
+ * 1.2.8
+ * - apache regexp instead of gnu regexp
*/
import java.net.*;
import java.io.*;
import java.util.*;
-import gnu.regexp.*;
-import gnu.getopt.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
+import fr.dgac.ivy.*;
+import org.apache.regexp.*;
+import gnu.getopt.*;
class TestNetSwing implements Runnable {
private JFrame frame;
private JLabel receive;
private JButton send;
- private JComboBox domainBox;
private int alpha=0;
private Color color;
private static int FADINGSTEP = 20;
@@ -31,59 +35,33 @@ class TestNetSwing implements Runnable {
private static Color DEFAULT_COLOR =
new Color(DEFAULT_RED,DEFAULT_GREEN,DEFAULT_BLUE,DEFAULT_ALPHA);
- private static String[] domainList = {
- "127.255.255.255:2010",
- "10.0.0.255:2010",
- "10.192.36.255:2010",
- "227.1.2.3:4567"
- };
-
- private Thread server;
private Ageing age;
- private String domain;
+ private String domainAddr="none";
+ private int port=0;
+ private int serial=1;
private boolean watcherrunning = false;
+ private volatile Thread watcherThread;
private boolean isMulticastAddress = false;
private Thread broadcastListener ;
private DatagramSocket broadcast; /* supervision socket */
// it can also be a MulticastSocket, which inherits from the previous
- public TestNetSwing(String d) {
- if (d==null) { d = domainList[0]; };
- domain=d;
- server = createBroadcastListener(domain);
- server.start();
- frame = new JFrame("TestNet");
- frame.addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent e) {
- System.exit(0);
- }
- });
+ public TestNetSwing(String da,int p) {
+ this.domainAddr=da;
+ this.port=p;
+ createBroadcastListener();
+ frame = new JFrame("TestNet "+domainAddr+":"+port);
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = frame.getContentPane();
cp.setLayout(new GridLayout(0,1));
- cp.add(send = new JButton("send packet"));
+ cp.add(send = new JButton("send packet to "+domainAddr+":"+port));
send.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
- send("hello",domain);
+ send("hello",domainAddr,port);
}
});
cp.add(receive = new JLabel(""));
- domainBox = new JComboBox();
- domainBox.setEditable(true);
boolean sel = false;
- int index=0;
- for (;index<domainList.length;index++) {
- domainBox.addItem(domainList[index]);
- if (domainList[index]==d) {
- domainBox.setSelectedIndex(index);
- sel=true;
- }
- }
- if (!sel) {
- domainBox.addItem(domain);
- domainBox.setSelectedIndex(index);
- }
- cp.add(domainBox);
- domainBox.addActionListener(new ComboCB());
frame.pack();
age=new Ageing();
frame.setVisible(true);
@@ -91,21 +69,21 @@ class TestNetSwing implements Runnable {
public void run() {
byte buf[] = new byte[256];
+ Thread thisThread=Thread.currentThread();
for (int i=0;i<buf.length;i++) { buf[i]=10; }
DatagramPacket packet=new DatagramPacket(buf, 256);
- int port;
- String s = "Server waiting for Broadcast on "+domain;
+ String s = "Server waiting for Broadcast on "+domainAddr+":"+port;
s+=(isMulticastAddress)?" (TCP multicast)":" (UDP broadcast)";
System.out.println(s);
- while( watcherrunning ) try {
+ while( watcherThread==thisThread) try {
broadcast.receive(packet);
String msg = new String(buf) ;
// clean up the buffer after each message
for (int i=0;i<buf.length;i++) { buf[i]=10; }
InetAddress remotehost = packet.getAddress();
- updateLabel(remotehost.getHostName()+":"+msg);
+ updateLabel("("+(serial++)+") "+ remotehost.getHostName()+":"+msg);
} catch (java.io.InterruptedIOException jii ){
- if (!watcherrunning) break;
+ if (watcherThread!=thisThread) break;
} catch (java.io.IOException ioe ){
System.err.println("IvyWatcher IOException "+ ioe.getMessage() );
}
@@ -113,7 +91,11 @@ class TestNetSwing implements Runnable {
System.out.println("Server normal shutdown");
}
- void stop() { watcherrunning=false; }
+ synchronized void stop() {
+ Thread t = watcherThread;
+ watcherThread = null;
+ if (t!=null) { t.interrupt(); }
+ }
private void updateLabel(String text) {
if (text==null) return;
@@ -125,39 +107,10 @@ class TestNetSwing implements Runnable {
receive.setForeground(color);
}
- private static String getDomain(String net) {
- int sep_index = net.lastIndexOf( ":" );
- if ( sep_index != -1 ) { net = net.substring(0,sep_index); }
- try {
- net += ".255.255.255";
- RE exp = new RE( "^(\\d+\\.\\d+\\.\\d+\\.\\d+).*");
- net = exp.substitute( net , "$1" );
- } catch ( REException e ){
- System.out.println("Bad broascat addr " + net);
- return null;
- }
- //System.out.println("net: "+net);
- return net;
- }
-
- private static int getPort(String net) {
- int port;
- int sep_index = net.lastIndexOf( ":" );
- if ( sep_index == -1 ) {
- port = -1;
- } else {
- port = Integer.parseInt( net.substring( sep_index +1 ));
- }
- //System.out.println("port: "+port);
- return port;
- }
-
- private static void send(String data, String net) {
- int port = getPort(net);
- net=getDomain(net);
+ private static void send(String data, String domain,int port) {
try {
DatagramSocket send;
- InetAddress group = InetAddress.getByName(net);
+ InetAddress group = InetAddress.getByName(domain);
send = new MulticastSocket(port);
if (group.isMulticastAddress()) { ((MulticastSocket)send).joinGroup(group); }
DatagramPacket packet = new DatagramPacket(
@@ -174,31 +127,28 @@ class TestNetSwing implements Runnable {
}
}
- private Thread createBroadcastListener(String domain) {
- String domainaddr=getDomain(domain);
- int port=getPort(domain);
- this.domain=domainaddr+":"+port;
+ private void createBroadcastListener() {
try {
- InetAddress group = InetAddress.getByName(domainaddr);
+ InetAddress group = InetAddress.getByName(domainAddr);
if (group.isMulticastAddress()) {
isMulticastAddress = true;
- broadcast = new MulticastSocket(port ); // create the UDP socket
+ broadcast = new MulticastSocket(port); // create the UDP socket
((MulticastSocket)broadcast).joinGroup(group);
} else {
- broadcast = new MulticastSocket(port ); // create the UDP socket
+ broadcast = new MulticastSocket(port); // create the UDP socket
}
} catch ( IOException e ) {
System.out.println("MulticastSocket I/O error" + e );
- return null;
+ e.printStackTrace();
+ System.exit(0);
}
try {
- broadcast.setSoTimeout(100);
+ broadcast.setSoTimeout(Ivy.TIMEOUTLENGTH);
} catch ( java.net.SocketException jns ) {
System.out.println("IvyWatcher setSoTimeout error" + jns.getMessage() );
}
- // starts a Thread listening on the socket
- watcherrunning=true;
- return new Thread(this);
+ watcherThread = new Thread(this);
+ watcherThread.start();
}
private class Ageing implements Runnable {
@@ -225,35 +175,58 @@ class TestNetSwing implements Runnable {
public void stop(){ encore=false; }
}
- private class ComboCB implements ActionListener {
- public void actionPerformed(ActionEvent e) {
- String newDomain=(String)domainBox.getSelectedItem();
- System.out.println("coucou "+ domainBox.getEditor().getItem());
- // if it's the same domain, don't do anything
- if (newDomain == domain) { return; }
- domain=newDomain;
- watcherrunning=false;
- server.stop();
- server = createBroadcastListener(domain);
- server.start();
+ /*
+ * copied verbatim from IvyWatcher , I should put TestNetSwing *in* the
+ * distribution itself ...
+ */
+ static String getDomain(String net) throws IvyException {
+ // System.out.println("debug: net=[" + net+ "]");
+ int sep_index = net.lastIndexOf( ":" );
+ if ( sep_index != -1 ) { net = net.substring(0,sep_index); }
+ try {
+ RE numbersPoint = new RE("([0-9]|\\.)+");
+ if (!numbersPoint.match(net)) {
+ // traceDebug("should only have numbers and point ? I won't add anything... " + net);
+ return net;
+ }
+ net += ".255.255.255";
+ RE exp = new RE( "^(\\d+\\.\\d+\\.\\d+\\.\\d+).*");
+ if (!exp.match(net)) {
+ System.out.println("Bad broascat addr " + net);
+ throw new IvyException("bad broadcast addr");
+ }
+ net=exp.getParen(1);
+ } catch ( RESyntaxException e ){
+ System.out.println(e);
+ System.exit(0);
}
- } // ComboCB
+ // System.out.println("debug: returning net=[" + net+ "]");
+ return net;
+ }
+
+ static int getPort(String net) { // returns 0 if no port is set
+ int sep_index = net.lastIndexOf( ":" );
+ int port= ( sep_index == -1 ) ? 0 :Integer.parseInt( net.substring( sep_index +1 ));
+ // System.out.println("net: ["+net+"]\nsep_index: "+sep_index+"\nport: "+port);
+ return port;
+ }
+
public static final String helpmsg = "usage: java TestNetSwing [options]\n\t-b BUS\tspecifies the Ivy bus domain\n\t-h\thelp\n\n";
- public static void main(String[] args) {
+ public static void main(String[] args) throws IvyException {
Getopt opt = new Getopt("TestNetSwing",args,"b:h");
- String domain = null;
int c;
+ String domainstring = Ivy.getDomain(null);
while ((c = opt.getopt()) != -1) switch (c) {
case 'b':
- domain=opt.getOptarg();
+ domainstring=opt.getOptarg();
break;
case 'h':
default:
System.out.println(helpmsg);
System.exit(0);
} // getopt
- new TestNetSwing(domain);
+ new TestNetSwing(getDomain(domainstring),getPort(domainstring));
}
} // class TestNetSwing