1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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++;
}
}
}
|