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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
// **********************************************************************
//
// Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
using Test;
public class RemoteCommunicatorI : RemoteCommunicatorDisp_
{
public override RemoteObjectAdapterPrx
createObjectAdapter(int timeout, int close, int heartbeat, Ice.Current current)
{
Ice.Communicator com = current.adapter.getCommunicator();
Ice.Properties properties = com.getProperties();
string protocol = properties.getPropertyWithDefault("Ice.Default.Protocol", "tcp");
string host = properties.getPropertyWithDefault("Ice.Default.Host", "127.0.0.1");
string name = System.Guid.NewGuid().ToString();
if(timeout >= 0)
{
properties.setProperty(name + ".ACM.Timeout", timeout.ToString());
}
if(close >= 0)
{
properties.setProperty(name + ".ACM.Close", close.ToString());
}
if(heartbeat >= 0)
{
properties.setProperty(name + ".ACM.Heartbeat", heartbeat.ToString());
}
properties.setProperty(name + ".ThreadPool.Size", "2");
Ice.ObjectAdapter adapter = com.createObjectAdapterWithEndpoints(name, protocol + " -h \"" + host + "\"");
return RemoteObjectAdapterPrxHelper.uncheckedCast(current.adapter.addWithUUID(new RemoteObjectAdapterI(adapter)));
}
public override void
shutdown(Ice.Current current)
{
current.adapter.getCommunicator().shutdown();
}
};
public class RemoteObjectAdapterI : RemoteObjectAdapterDisp_
{
public RemoteObjectAdapterI(Ice.ObjectAdapter adapter)
{
_adapter = adapter;
_testIntf = TestIntfPrxHelper.uncheckedCast(_adapter.add(new TestI(),
_adapter.getCommunicator().stringToIdentity("test")));
_adapter.activate();
}
public override TestIntfPrx getTestIntf(Ice.Current current)
{
return _testIntf;
}
public override void activate(Ice.Current current)
{
_adapter.activate();
}
public override void hold(Ice.Current current)
{
_adapter.hold();
}
public override void deactivate(Ice.Current current)
{
try
{
_adapter.destroy();
}
catch(Ice.ObjectAdapterDeactivatedException)
{
}
}
private Ice.ObjectAdapter _adapter;
private TestIntfPrx _testIntf;
};
public class TestI : TestIntfDisp_
{
public override void sleep(int delay, Ice.Current current)
{
lock(this)
{
System.Threading.Monitor.Wait(this, delay * 1000);
}
}
public override void sleepAndHold(int delay, Ice.Current current)
{
lock(this)
{
current.adapter.hold();
System.Threading.Monitor.Wait(this, delay * 1000);
}
}
public override void interruptSleep(Ice.Current current)
{
lock(this)
{
System.Threading.Monitor.PulseAll(this);
}
}
class ConnectionCallbackI : Ice.ConnectionCallback
{
public void heartbeat(Ice.Connection c)
{
lock(this)
{
--_count;
System.Threading.Monitor.PulseAll(this);
}
}
public void closed(Ice.Connection c)
{
}
public void waitForCount(int count)
{
lock(this)
{
_count = count;
while(_count > 0)
{
System.Threading.Monitor.Wait(this);
}
}
}
private int _count = 0;
};
public override void waitForHeartbeat(int count, Ice.Current current)
{
ConnectionCallbackI callback = new ConnectionCallbackI();
current.con.setCallback(callback);
callback.waitForCount(count);
}
};
|