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.13
Committed: Sat Mar 17 03:57:17 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
CVS Tags: PROJECT_COMPLETION
Changes since 1.12: +2 -5 lines
Log Message:
This class now has shutdown functions.

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