aboutsummaryrefslogtreecommitdiff
path: root/tests/TestApi.java
blob: f6e8ecfbc9286271db4b28be90161b20e88ef49c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
 * Ivy java library API tester.
 *
 * @author  Yannick Jestin <mailto:jestin@cena.fr>
 *
 * (c) CENA
 *
 * usage: java TestApi
 *
 */
import fr.dgac.ivy.*;

class TestApi implements IvyMessageListener, IvyApplicationListener {

  public static final String TestApiReadyMsg = "TestAPI ready";
  public static final String TestMsg = "Test Message";

  private Ivy bus;
  private int test=0;
  private String domain;

  public TestApi(String domain) throws IvyException {
    System.out.println("TestApi joining the bus");
    bus = new Ivy("TestAPI",TestApiReadyMsg, null);
    bus.addApplicationListener(this);
    bus.bindMsg("^"+TestMsg+"$",this);
    bus.start(this.domain=domain);
    bus.sendToSelf(true);
    bus.bindMsg("^go$",new Self(domain));
    System.out.println("sending go ...");
    try { bus.sendMsg("go"); } catch (IvyException ie) {
      ie.printStackTrace();
    }
    System.out.println("go sent");
  }

  public void receive(IvyClient ic,String[] args) {
    String s = "[X] received message";
    for (int i=0;i<args.length;i++) s+=": "+args[i];
    System.out.println(s);test++;
  }

  public void connect(IvyClient ic) {
    if (ic.getApplicationName().compareTo("Sender")!=0) return;
    System.out.println("[X] Sender connected");test++;
  }

  public void disconnect(IvyClient ic) {
    if (ic.getApplicationName().compareTo("Sender")!=0) return;
    System.out.println("[X] Sender disconnected");test++;
  } 

  public void directMessage(IvyClient ic,int id,String arg) {
    if (id!=1) return;
    System.out.println("[X] Direct message received, ID=1");test++;
  }

  public void die(IvyClient ic,int reason,String msg) {
    System.out.println("[X] Die received "+msg);test++;
    System.out.println(test+" tests successful, good bye");
    System.out.println("TestApi leaving the bus");
    bus.stop();
    System.out.println("TestApi has left");
  }

  class Self implements IvyMessageListener {
    private String domain;
    public Self(String domain)  {this.domain=domain;}
    public void receive(IvyClient c,String[] args){
      System.out.println("[X] received my own go message");test++;
      bus.sendToSelf(false);
      new Sender(domain) ;
    }
  }

  class Sender implements IvyMessageListener {
    private Ivy sbus;
    private String domain;
    public Sender(String domain)  {
      try {
	System.out.println("starting Sender on domain "+domain);
	sbus = new Ivy("Sender","Sender ready", null);
	sbus.bindMsg("^"+TestApiReadyMsg+"$",this);
	sbus.start(this.domain=domain);
      } catch (IvyException ie) {
	ie.printStackTrace();
      }
    }
    public void receive(IvyClient c,String[] args) {
      try {
	sbus.sendMsg(TestMsg);
	c.sendDirectMsg(1,"bye bye");
      } catch (IvyException ie) {
      }
      System.out.println("Sender leaving the bus");
      sbus.stop();
      System.out.println("Sender has left the bus");
      new Killer(domain,("^"+TestApiReadyMsg+"$"));
    }
  }

  public static void main(String[] args) throws IvyException {
    new TestApi(Ivy.getDomainArgs("TestApi",args));
  }

}