aboutsummaryrefslogtreecommitdiff
path: root/src/TestIvySwing.java
diff options
context:
space:
mode:
authorjestin1999-11-02 14:23:46 +0000
committerjestin1999-11-02 14:23:46 +0000
commit5d82c5cb30a72653420acd10bcea6fb94592acef (patch)
treef70483614dfa0d8c41465d4c66b0f05ea567a970 /src/TestIvySwing.java
parent15bb0f64aa8fac273e77170ace642e221610b9c3 (diff)
downloadivy-java-5d82c5cb30a72653420acd10bcea6fb94592acef.zip
ivy-java-5d82c5cb30a72653420acd10bcea6fb94592acef.tar.gz
ivy-java-5d82c5cb30a72653420acd10bcea6fb94592acef.tar.bz2
ivy-java-5d82c5cb30a72653420acd10bcea6fb94592acef.tar.xz
Bon, alors deux choses importantes dans cette release:
1/ le passage des Vectors aux Hashtables pour la collection des regexp, que ce soit dans Ivy.java ( regexp_in ) ou dans IvyClient.java (regexp_out) Les clefs sont des Integer ( msgid, et un serial incrémenté en sortie ) L'accès le plus simple pour modifier ces fichiers, c'est l'énumération sur les clefs. On truve des choses comme: for (Enumeration e = regexps.keys(); e.hasMoreElements(); ) { Integer key=(Integer)e.nextElement(); // des choses avec regexps.get(key) // ... } 2/ Un bugfix sauvage sans IvyClient.java Le msgarg n'était pas réinitialisé entre deux parsings de messages. Dans le cas d'un message reçu sur une regexp sans groupement (.*), comme par exemple ^AIRCRAFT:, on faisait tout de même passer la valeur précédente de msgarg. C'est fini. Over. out. heraus schnell. 3/ j'avais dit deux ? dans le monde, il y a trois type de gens, ceux qui ne savent pas compter, et les autres. Je rajoute un TestIvySwing, qui nécéssite un swingall.jar, mais c'est un problème de paquetage, et pas de libivy. En fait, ça devrait devenir à terme un autre paquetage. Yannick.
Diffstat (limited to 'src/TestIvySwing.java')
-rw-r--r--src/TestIvySwing.java173
1 files changed, 173 insertions, 0 deletions
diff --git a/src/TestIvySwing.java b/src/TestIvySwing.java
new file mode 100644
index 0000000..a6d3777
--- /dev/null
+++ b/src/TestIvySwing.java
@@ -0,0 +1,173 @@
+package fr.dgac.ivy ;
+
+import java.awt.BorderLayout;
+import java.awt.event.*;
+import javax.swing.* ;
+
+class TestIvySwing extends JPanel implements IvyApplicationListener {
+
+ private static int index;
+ private static int nbTIS=0;
+ String localname;
+
+ Ivy bus ;
+ String regexp = "^AIRCRAFT:";;
+ JLabel laRegex;
+ JTextArea ta ;
+ JTextField tfRegex, tfSend ;
+ JButton buApply, buSend, buClear ;
+ JComboBox ports;
+ int regexp_id;
+ REGCB reg;
+
+ public TestIvySwing() throws IvyException {
+ super(new BorderLayout());
+ nbTIS++;
+ // un textarea au centre
+ ta = new JTextArea(25,40);
+ ta.setEditable(false);
+ add(new JScrollPane(ta),BorderLayout.CENTER);
+ // une zone regex au nord
+ JPanel p = new JPanel(new BorderLayout());
+ p.add(new JLabel("Regex:"),BorderLayout.WEST);
+ tfRegex = new JTextField();
+ tfRegex.addActionListener(reg=new REGCB());
+ p.add(tfRegex,BorderLayout.CENTER);
+ p.add(laRegex=new JLabel(regexp),BorderLayout.EAST);
+ add(p,BorderLayout.NORTH);
+ // une zone messages au sud du nord, mais au nord du centre
+ JPanel p2 = new JPanel(new BorderLayout());
+ p2.add(new JLabel("Msg:"),BorderLayout.WEST);
+ tfSend = new JTextField("");
+ tfSend.addActionListener(new SENDCB());
+ p2.add(tfSend,BorderLayout.CENTER);
+ p.add(p2,BorderLayout.SOUTH);
+ // au sud, je rajoute un bouton pour spawner un autre testeur
+ JButton tmpb ;
+ (p = new JPanel()).add(tmpb=new JButton("spawn"));
+ tmpb.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ try { newTestIvy();
+ } catch (IvyException ie) {}
+ }
+ });
+ p.add(tmpb=new JButton("clear"));
+ tmpb.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ ta.setText("");
+ }
+ });
+
+ ports=new JComboBox();
+ ports.addItem("127.255.255.255:2010");
+ ports.addItem("143.196.53.255:2010");
+ ports.addItem("143.196.53.255:2020");
+ ports.addItem("143.196.53.255:3110");
+ ports.addActionListener(new ComboCB());
+ p.add(ports);
+ add(p,BorderLayout.SOUTH);
+ // gestion du fovus clavier
+ tfRegex.setNextFocusableComponent(tfSend);
+ tfSend.setNextFocusableComponent(tfRegex);
+ tfSend.setRequestFocusEnabled(true);
+ localname = "TestIvySwing ("+index+")";
+ index++;
+ bus = new Ivy(localname,localname+" prêt",this);
+ regexp_id = bus.bindMsg(regexp,reg);
+ bus.start(null);
+ append( "Ivy Domain: "+ bus.getDomain(null) );
+ }
+
+ public String getLocalname(){ return localname;}
+
+ public void stop() { bus.stop(); }
+
+ public void connect(IvyClient client) {
+ append(client.getApplicationName() + " connected " );
+ }
+
+ public void disconnect(IvyClient client) {
+ append(client.getApplicationName() + " disconnected " );
+ }
+
+ public void die(IvyClient client, int id) {
+ append(client.getApplicationName() + " die "+ id );
+ }
+
+ public void directMessage(IvyClient client, int id, String arg) {
+ append(client.getApplicationName() + " direct Message "+ id + arg );
+ }
+
+ /* inner */ class ComboCB implements ActionListener {
+ public void actionPerformed(ActionEvent e) {
+ String newDomain=(String)ports.getSelectedItem();
+ bus.stop();
+ try {
+ bus.start(newDomain);
+ } catch (IvyException ie ) {
+ System.err.println("auuuugh "+newDomain);
+ }
+ }
+ } // ComboCB
+
+ /* inner */ class REGCB implements ActionListener, IvyMessageListener {
+ public void actionPerformed(ActionEvent e) {
+ // enlever l'ancienne regex
+ bus.unBindMsg(regexp_id);
+ // ajoute la nouvelle regex
+ regexp=tfRegex.getText();
+ regexp.trim();
+ regexp_id = bus.bindMsg(regexp,this);
+ tfRegex.setText("");
+ laRegex.setText(regexp);
+ }
+ public void receive(IvyClient client, String[] args) {
+ String out="client " + client.getApplicationName() + " envoie: [ ";
+ for (int i=0;i<args.length;i++) {
+ out+=args[i]+ ((i<args.length-1)?" , ":"");
+ }
+ out+=" ]";
+ append(out);
+ }
+ }
+
+ /* inner */ class SENDCB implements ActionListener {
+ public void actionPerformed(ActionEvent e) {
+ int count;
+ String tosend = tfSend.getText();
+ tfSend.setText("");
+ if ( (count = bus.sendMsg(tosend)) != 0 )
+ append("Sending '" + tosend + "' count " + count );
+ else
+ append("not Sending '" + tosend + "' nobody cares");
+ }
+ }
+
+ private void append(String s) { ta.append(s + "\n"); }
+
+
+ public static void newTestIvy() throws IvyException {
+ TestIvySwing tb = new TestIvySwing();
+ JFrame f = new JFrame(tb.getLocalname());
+ f.addWindowListener( tb.new WCCB(f,tb)) ;
+ f.getContentPane().add(tb, BorderLayout.CENTER);
+ f.pack();
+ f.setVisible(true);
+ }
+
+ /* inner */ class WCCB extends WindowAdapter {
+ private JFrame f;
+ public WCCB(JFrame f, TestIvySwing b) { this.f=f; }
+ public void windowClosing(WindowEvent e) {
+ bus.stop();
+ f.dispose();
+ if (--nbTIS == 0) System.exit(0);
+ // je quitte l'appli au départ du dernier TIS
+ }
+ public void windowActivated(WindowEvent e) { tfSend.grabFocus(); }
+ } // WCCB
+
+ public static void main(String[] args) throws IvyException { newTestIvy(); }
+}
+
+// EOF