summaryrefslogtreecommitdiff
path: root/IvyFilter/Filter.cs
diff options
context:
space:
mode:
Diffstat (limited to 'IvyFilter/Filter.cs')
-rw-r--r--IvyFilter/Filter.cs119
1 files changed, 119 insertions, 0 deletions
diff --git a/IvyFilter/Filter.cs b/IvyFilter/Filter.cs
new file mode 100644
index 0000000..03e2435
--- /dev/null
+++ b/IvyFilter/Filter.cs
@@ -0,0 +1,119 @@
+
+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)
+ bus.SentMessageFilter.AddRange(filter);
+ bus.BindingAdd += new EventHandler<IvyEventArgs>(bus_BindingAdd);
+ bus.BindingRemove += new EventHandler<IvyEventArgs>(bus_BindingRemove);
+ bus.BindingFilter += new EventHandler<IvyEventArgs>(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++;
+ }
+
+ }
+} \ No newline at end of file