import JavaGroups.*;
public class PullPushTest implements MessageListener {
Channel channel;
PullPushAdapter adapter;
byte[] data=new String("Hello world").getBytes();
public void Receive(Message msg) {
System.out.println("Received msg: " + msg);
}
public void Start() throws Exception {
channel=new JChannel();
channel.Connect("PullPushTest");
adapter=new PullPushAdapter(channel);
adapter.SetListener(this);
for(int i=0; i < 10; i++) {
System.out.println("Sending msg #" + i);
channel.Send(new Message(null, null, data));
Thread.currentThread().sleep(1000);
}
adapter.Stop();
channel.Close();
}
public static void main(String args[]) {
try {
new PullPushTest().Start();
}
catch(Exception e) {
System.err.println(e);
}
}
}
Contrary to using channels (using pull-style message reception), no separate thread has to be allocated to receive messages. Instead, a PullPushAdapter is layered on top of the channel and a reference to the client object added. This causes the client's Receive method to be called whenever a message has been received by the PullPushAdapter. Note that, compared to the pull-style example, push-style message reception is considerably easier (no separate thread management) and requires less code to program.