ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/clientinterface/CorbaControlHandlerServant.java
Revision: 1.11
Committed: Fri Mar 16 01:50:36 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.10: +3 -3 lines
Log Message:
When a CORBA Client disconnects it is caught in the DataHandler. But this would
leave the ControlHandler just lurking about, so we now explicitly make an effort
to close it down, and disconnect it from the ORB.

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.org.iscream.clientinterface;
3
4 //---IMPORTS---
5 import uk.org.iscream.util.*;
6 import uk.org.iscream.componentmanager.*;
7 import uk.org.iscream.core.*;
8 import uk.org.iscream.client.*;
9
10
11 /**
12 * Acts as a Control Handler to a CORBA based client.
13 *
14 * !!! FUNDAMENTAL DESIGN PROBLEM !!!
15 * !!! Need a way to "shutdown" this class !!!
16 *
17 * @author $Author: tdb1 $
18 * @version $Id: CorbaControlHandlerServant.java,v 1.10 2001/03/14 23:25:29 tdb1 Exp $
19 */
20 class CorbaControlHandlerServant extends CorbaControlHandlerPOA {
21
22 //---FINAL ATTRIBUTES---
23
24 /**
25 * The current CVS revision of this class
26 */
27 public final String REVISION = "$Revision: 1.10 $";
28
29 //---STATIC METHODS---
30
31 //---CONSTRUCTORS---
32
33 /**
34 * Construct a new CorbaControlHandlerServant.
35 *
36 * @param packetSorter A reference to the PacketSorter in the component
37 * @param client A reference to the "servant" part of the connecting client.
38 * @param queueMonitorInterval The interval at which to monitor our Queue.
39 * @param clientname A name to identify the client.
40 */
41 public CorbaControlHandlerServant(PacketSorter packetSorter, Client client, String clientname) {
42 _packetSorter = packetSorter;
43 _hostList = "";
44 _client = client;
45 _clientname = clientname;
46 _dataHandler = null;
47 _logger.write(toString(), Logger.SYSINIT, "created");
48 }
49
50 //---PUBLIC METHODS---
51
52 /**
53 * Start sending data to the client.
54 *
55 * @return a boolean stating whether the attempt to start succeeded
56 */
57 public boolean startData() {
58 if(_dataHandler == null) {
59 // create a new DataHandler
60 CorbaDataHandler dh = new CorbaDataHandler(_client, this);
61 // register the Queue
62 _packetSorter.register(dh.getQueue(), _hostList);
63 try {
64 // startup a monitor on the DataHandler's queue
65 ConfigurationProxy cp = ConfigurationProxy.getInstance();
66 int queueMonitorInterval = Integer.parseInt(cp.getProperty("ClientInterface", "Queue.MonitorInterval"));
67 String queueName = _name + " CorbaHandler:"+_clientname;
68 dh.getQueue().startMonitor(queueMonitorInterval*1000, _packetSorter.getQueue(), queueName);
69 } catch (PropertyNotFoundException e) {
70 _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + e);
71 }
72 // start the DataHandler running
73 dh.start();
74 // keep a reference
75 _dataHandler = dh;
76 return true;
77 }
78 else {
79 return false;
80 }
81 }
82
83 /**
84 * Stop sending data to the client.
85 *
86 * @return a boolean stating whether the attempt to stop succeeded
87 */
88 public boolean stopData() {
89 if(_dataHandler != null) {
90 // deregister the Queue
91 _packetSorter.deregister(_dataHandler.getQueue(), _hostList);
92 // stop the DataHandler
93 _dataHandler.shutdown();
94 // destroy the reference
95 _dataHandler = null;
96 return true;
97 }
98 else {
99 return false;
100 }
101 }
102
103 /**
104 * Sets the host list for the Client to the requested semi-colon separated
105 * list of hostnames. This will only succeed if we are not sending data.
106 *
107 * @param hostList A semi-colon separated list of hostnames to use.
108 * @return Whether the request succeeded.
109 */
110 public boolean setHostList(String hostList) {
111 if(_dataHandler == null) {
112 _hostList = hostList;
113 return true;
114 }
115 else {
116 return false;
117 }
118 }
119
120 /**
121 * Disconnect, this will shutdown the data and unhook from
122 * the CORBA ORB.
123 */
124 public void disconnect() {
125 // close the data handler
126 stopData();
127 // disconnect from the ORB
128 try {
129 byte[] oid = _refman.getRootPOA().servant_to_id(this);
130 _refman.getRootPOA().deactivate_object(oid);
131 } catch(Exception e) {
132 _logger.write(this.toString(), Logger.ERROR, "disconnect failed: "+e);
133 }
134 }
135
136 /**
137 * Overrides the {@link java.lang.Object#toString() Object.toString()}
138 * method to provide clean logging (every class should have this).
139 *
140 * This uses the uk.org.iscream.util.NameFormat class
141 * to format the toString()
142 *
143 * @return the name of this class and its CVS revision
144 */
145 public String toString() {
146 return FormatName.getName(
147 _name,
148 getClass().getName(),
149 REVISION);
150 }
151
152 //---PRIVATE METHODS---
153
154 //---ACCESSOR/MUTATOR METHODS---
155
156 //---ATTRIBUTES---
157
158 /**
159 * This is the friendly identifier of the
160 * component this class is running in.
161 * eg, a Filter may be called "filter1",
162 * If this class does not have an owning
163 * component, a name from the configuration
164 * can be placed here. This name could also
165 * be changed to null for utility classes.
166 */
167 private String _name = ClientInterfaceMain.NAME;
168
169 /**
170 * This holds a reference to the
171 * system logger that is being used.
172 */
173 private Logger _logger = ReferenceManager.getInstance().getLogger();
174
175 /**
176 * A reference to the reference manager in use
177 */
178 private ReferenceManager _refman = ReferenceManager.getInstance();
179
180 /**
181 * A reference to the PacketSorter.
182 */
183 private PacketSorter _packetSorter;
184
185 /**
186 * The host list the Client has requested
187 */
188 private String _hostList;
189
190 /**
191 * The "servant" part of the client we're connected to.
192 */
193 private Client _client;
194
195 /**
196 * A reference to our DataHandler, if we have one
197 */
198 private CorbaDataHandler _dataHandler;
199
200 /**
201 * A name to identify the client
202 */
203 private String _clientname;
204
205 //---STATIC ATTRIBUTES---
206
207 }