using System; using IvyBus; using System.Threading; using Gnu; namespace IvyFilter { class Filter { internal Ivy bus; [STAThread] public static void Main(System.String[] args) { GetOpt opt = new GetOpt(args, "b:n:t:"); System.String domain = Ivy.GetDomain(null); int nb = 10000; int t = 1000; Arg a; while ((a = opt.NextArg() )!= null) { switch (a.Flag) { case 'b': domain = a.Parameter; break; case 't': t = int.Parse(a.Parameter); break; case 'n': nb = int.Parse(a.Parameter); break; default: System.Environment.Exit(0); break; } } new Filter(domain, nb, t, true); } private int nbmsg; private int bounded = 0, unbounded = 0; private string[] filter = new string[] { "GetDummy" }; public Filter(string domain, int n, int t, bool f) { System.Console.Out.WriteLine("trying Filter on " + n + " messages, " + t + " ms delay"); nbmsg = n; bus = new Ivy("Filter", "Filter ready"); if (f) { foreach (string str in filter) { bus.SentMessageFilter.Add(str); } } bus.BindingAdd += new EventHandler(bus_BindingAdd); bus.BindingRemove += new EventHandler(bus_BindingRemove); bus.BindingFilter += new EventHandler(bus_BindingFilter); bus.Start(domain); /* attend une seconde ou deux */ try { Thread.Sleep(2000); } catch (System.Threading.ThreadInterruptedException ) { } System.Console.Out.WriteLine(bounded + " bounded subscriptions, " + unbounded + " unbounded"); System.Console.Out.WriteLine(bus.IvyClients.Count + " clients"); DateTime debut = System.DateTime.Now; TimeSpan total = new TimeSpan(); DateTime debutlocal = System.DateTime.Now; DateTime finlocal = System.DateTime.Now; for (int i = 0; i < n; i++) { try { // System.out.println("sending msg"); debutlocal = System.DateTime.Now; bus.SendMsg("GetDummy message"); finlocal = System.DateTime.Now; total += finlocal - debutlocal; Thread.Sleep( t ); } catch (IvyException ) { System.Environment.Exit(-1); } catch (ThreadInterruptedException ) { } } System.Console.Out.WriteLine(((f) ? "[filtered] " : "[non filtered] ") + total.TotalMilliseconds + "ms elapsed, " + (finlocal - debut).TotalMilliseconds + " ms total out of " + n * t); bus.Stop(); if (f == true) new Filter(domain, n, t, false); // relance le même test sans filtre System.Console.ReadLine(); } void bus_BindingFilter(object sender, IvyEventArgs e) { unbounded++; } void bus_BindingRemove(object sender, IvyEventArgs e) { bounded--; } void bus_BindingAdd(object sender, IvyEventArgs e) { bounded++; } } }