diff options
author | jestin | 1999-11-02 14:23:46 +0000 |
---|---|---|
committer | jestin | 1999-11-02 14:23:46 +0000 |
commit | 5d82c5cb30a72653420acd10bcea6fb94592acef (patch) | |
tree | f70483614dfa0d8c41465d4c66b0f05ea567a970 /src/TestIvySwing.java | |
parent | 15bb0f64aa8fac273e77170ace642e221610b9c3 (diff) | |
download | ivy-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.java | 173 |
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 |