/** * Ivy java Async API tester: bindAsyncMsg, sendAsyncMsg. * * @author Yannick Jestin * * (c) CENA * * usage: java AsyncAPI -h * * this program tests the Asynchronous reception of messages ( each callback * is performed in a separate threads ). It also exhibits the behaviour of the * library with regards to concurrent connections ! To stress the test, try it * with different JVM ( kaffe is especially hard to pass ), and on SMP * machines ... * * changelog * * 1.2.6 : async sending seems utterly buggy ... * */ import fr.dgac.ivy.*; import gnu.getopt.*; class AsyncAPI { public static final int MSGSIZE = 10; public static final int NBITER = 100; public static final int DELAYMS = 1000; public static final String HEADER = "ASYNCPACKET"; public static final String TOSUBSCRIBE = "^"+HEADER+"([0-9]+) (.*)"; public static final String RECEIVENAME = "MSreceive"; public static final String SENDNAME = "MSsend"; private static long epoch = System.currentTimeMillis(); private Ivy bus; DelayAnswer delay; int re; private String name; boolean verbose; private int nbpacket; private int wait=0; public AsyncAPI(int nb,String domain,int d, boolean v,boolean async) throws IvyException { verbose=v; nbpacket=nb; name = "MSreceive"; bus = new Ivy(name,null, null); wait = d; delay=new DelayAnswer(); if (async) re = bus.bindAsyncMsg(TOSUBSCRIBE,delay,BindType.ASYNC); else re = bus.bindMsg(TOSUBSCRIBE,delay); bus.start(domain); } private static java.text.DateFormat df = java.text.DateFormat.getTimeInstance(); private static String date() { return "["+df.format(new java.util.Date())+"] "; } static Object truc = new Object(); int count=0,total=0; int status = 0; synchronized void huh(IvyClient ic, String[] args) { count++; if (verbose) { System.out.println(date()+"RECEIVE "+ count+"/"+nbpacket+" packets received arg:("+args[0]+")"); int nb = Integer.parseInt(args[0]); total+=nb; if (nb!=count) { System.out.println("RECEIVE *** ERROR *** "+count+"!="+nb+ " - probable double connexion"); for (IvyClient i : bus.getIvyClients() ) System.out.println("client: "+i); ic.sendDie("nok, bye"); bus.stop(); System.exit(-1); } } if (count