summaryrefslogtreecommitdiff
path: root/Ivy/IvyPerf/IvyPerf.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ivy/IvyPerf/IvyPerf.cs')
-rw-r--r--Ivy/IvyPerf/IvyPerf.cs74
1 files changed, 74 insertions, 0 deletions
diff --git a/Ivy/IvyPerf/IvyPerf.cs b/Ivy/IvyPerf/IvyPerf.cs
new file mode 100644
index 0000000..9d37883
--- /dev/null
+++ b/Ivy/IvyPerf/IvyPerf.cs
@@ -0,0 +1,74 @@
+using System;
+using IvyBus;
+using System.Threading;
+using System.Globalization;
+using System.Collections.Specialized;
+
+namespace IvyPerf
+{
+ /// <summary>
+ /// Description résumée de IvyPerf.
+ /// mesure des perfo de round trip entre deux applis
+ /// </summary>
+ class IvyPerf
+ {
+ static Ivy bus;
+ static double origin = 0;
+
+ static double currentTime() // en ms
+ {
+ double time;
+ time = (double)(DateTime.Now.Ticks) / (double)(TimeSpan.TicksPerMillisecond);
+ //time = Environment.TickCount;
+ return time;
+ }
+ [IvyBinding("^ping ts=(.*)")]
+ static void Reply(object sender, IvyMessageEventArgs args)
+ {
+ bus.SendMsg("pong ts={0} tr={1}", args[0], currentTime() - origin );
+ }
+ [IvyBinding("^pong ts=(.*) tr=(.*)")]
+ static void Pong(object sender, IvyMessageEventArgs args)
+ {
+ double current = currentTime() - origin;
+ double ts = double.Parse(args[0], bus.Culture );
+ double tr = double.Parse(args[1], bus.Culture );
+ double roundtrip1 = tr - ts;
+ double roundtrip2 = current - tr;
+ double roundtrip3 = current - ts;
+ Console.WriteLine("round trip {0} {1} {2}", roundtrip1, roundtrip2, roundtrip3);
+ }
+ /// <summary>
+ /// Point d'entrée principal de l'application.
+ /// </summary>
+ [STAThread]
+ static void Main(string[] args)
+ {
+ int timeout = 1000;
+ if (args.Length > 0)
+ timeout = int.Parse(args[0]);
+ bus = new Ivy("IvyPerf", "IvyPref ready");
+ bus.SentMessageFilter.Add("ping");
+ bus.SentMessageFilter.Add("pong");
+ bus.SentMessageFilter.Add("IvyPref");
+ bus.BindingFilter += new EventHandler<IvyEventArgs>(bus_BindingFilter);
+ //TODO how to autobind
+ //bus.BindAttibute(typeof(IvyPerf));
+ //TODO auto generation of testtarget ?? how to
+ //bus.BindMsg("test", new EventHandler<IvyMessageEventArgs>(testtarget));
+ bus.Start(null);
+ origin = currentTime();
+ while( true )
+ {
+ Thread.Sleep( timeout );
+ int count = bus.SendMsg("ping ts={0}", currentTime() - origin );
+ if ( count == 0 ) Console.Write( "." );
+ }
+ }
+
+ static void bus_BindingFilter(object sender, IvyEventArgs e)
+ {
+ Console.WriteLine( "The app {0} regexp {1} was Filtred.", e.Client.ApplicationName,e.Argument);
+ }
+ }
+}