package org.jgroups.tests;
import org.jgroups.*;
import org.jgroups.protocols.TP;
import org.jgroups.util.Util;
import org.jgroups.stack.IpAddress;
import org.jgroups.stack.Protocol;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
* Interactive program to test a unicast channel
* @author Bela Ban March 16 2003
*/
public class UnicastChannelTest {
boolean server=false;
String host="localhost";
int port=0;
String props=null;
JChannel ch;
public void start(String[] args) throws Exception {
for(int i=0; i < args.length; i++) {
String tmp=args[i];
if("-server".equals(tmp)) {
server=true;
continue;
}
if("-props".equals(tmp)) {
props=args[++i];
continue;
}
if("-host".equals(tmp)) {
host=args[++i];
continue;
}
if("-port".equals(tmp)) {
port=Integer.parseInt(args[++i]);
continue;
}
help();
return;
}
ch=new JChannel(props);
if(server) {
ch.setReceiver(new ReceiverAdapter() {
public void receive(Message msg) {
System.out.println("-- " + msg.getObject());
Address sender=msg.getSrc();
Message rsp=new Message(sender, null, "ack for " + msg.getObject());
try {
ch.send(rsp);
}
catch(Exception e) {
e.printStackTrace();
}
}
});
runServer();
}
else {
ch.setReceiver(new ReceiverAdapter() {
public void receive(Message msg) {
System.out.println("<-- " + msg.getObject());
}
public void viewAccepted(View new_view) {
System.out.println("new_view = " + new_view);
}
public void suspect(Address suspected_mbr) {
System.out.println("suspected_mbr = " + suspected_mbr);
}
});
runClient();
}
}
void runClient() throws Exception {
IpAddress addr;
Message msg;
String line;
BufferedReader reader;
ch.connect(null); // unicast channel
addr=new IpAddress(host, port);
reader=new BufferedReader(new InputStreamReader(System.in));
while(true) {
System.out.print("> ");
line=reader.readLine();
if(line.startsWith("quit") || line.startsWith("exit")) {
ch.close();
return;
}
msg=new Message(addr, null, line);
ch.send(msg);
}
}
void runServer() throws Exception {
System.setProperty("jgroups.bind_addr", host);
if(port > 0) {
Protocol transport=ch.getProtocolStack().getTransport();
if(transport instanceof TP) {
((TP)transport).setBindPort(port);
}
}
ch.connect(null); // this makes it a unicast channel
System.out.println("server started at " + new java.util.Date() + ", listening on " + ch.getAddress());
while(ch.isOpen()) {
Util.sleep(10000);
}
}
static void help() {
System.out.println("UnicastChannelTest [-help] [-server] [-props <props>]" +
"[-host <host>] [-port <port>]");
}
public static void main(String[] args) {
try {
new UnicastChannelTest().start(args);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}