/* * A simple Swing application in order to check whether the chosen network is * OK */ 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.*; 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; private static int FADINGSLEEP = 100; private static int DEFAULT_RED=200; private static int DEFAULT_GREEN=10; private static int DEFAULT_BLUE=10; private static int DEFAULT_ALPHA=255; 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 boolean watcherrunning = false; 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); } }); Container cp = frame.getContentPane(); cp.setLayout(new GridLayout(0,1)); cp.add(send = new JButton("send packet")); send.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ae) { send("hello",domain); } }); cp.add(receive = new JLabel("")); domainBox = new JComboBox(); domainBox.setEditable(true); boolean sel = false; int index=0; for (;index0) { receive.setText(text.substring(0,i)); } else { receive.setText(text); } alpha=DEFAULT_ALPHA; color=DEFAULT_COLOR; 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); try { DatagramSocket send; InetAddress group = InetAddress.getByName(net); send = new MulticastSocket(port); if (group.isMulticastAddress()) { ((MulticastSocket)send).joinGroup(group); } DatagramPacket packet = new DatagramPacket( data.getBytes(), data.length(), group, send.getLocalPort() ); //System.out.println("Client sends Broadcast to "+net+":"+port+" ("+packet.getLength()+") ["+data+"]"); send.send(packet); } catch ( UnknownHostException e ) { System.out.println("Broadcast sent on unknown network "+ e.getMessage()); } catch ( IOException e ) { System.out.println("Broadcast error " + e.getMessage() ); } } private Thread createBroadcastListener(String domain) { String domainaddr=getDomain(domain); int port=getPort(domain); this.domain=domainaddr+":"+port; try { InetAddress group = InetAddress.getByName(domainaddr); if (group.isMulticastAddress()) { isMulticastAddress = true; broadcast = new MulticastSocket(port ); // create the UDP socket ((MulticastSocket)broadcast).joinGroup(group); } else { broadcast = new MulticastSocket(port ); // create the UDP socket } } catch ( IOException e ) { System.out.println("MulticastSocket I/O error" + e ); return null; } try { broadcast.setSoTimeout(100); } 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); } private class Ageing implements Runnable { boolean encore = true; public Ageing() { new Thread(this).start(); } public void run() { while (encore) { try { java.lang.Thread.sleep(FADINGSLEEP); } catch (InterruptedException ie) { } alpha-=FADINGSTEP; String s = receive.getText(); if (alpha<0) { alpha=0; receive.setText(null); s=null; } if (s!=null) { receive.setForeground(new Color(DEFAULT_RED,DEFAULT_GREEN,DEFAULT_BLUE,alpha)); } } } 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(); } } // ComboCB 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) { Getopt opt = new Getopt("TestNetSwing",args,"b:h"); String domain = null; int c; while ((c = opt.getopt()) != -1) switch (c) { case 'b': domain=opt.getOptarg(); break; case 'h': default: System.out.println(helpmsg); System.exit(0); } // getopt new TestNetSwing(domain); } } // class TestNetSwing /* EOF */