ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/filtermanager/HostInit.java
Revision: 1.17
Committed: Sun Feb 25 23:19:20 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.16: +3 -3 lines
Log Message:
Better error printing.

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.ac.ukc.iscream.filtermanager;
3
4 //---IMPORTS---
5 import uk.ac.ukc.iscream.core.*;
6 import uk.ac.ukc.iscream.filter.*;
7 import uk.ac.ukc.iscream.util.*;
8 import uk.ac.ukc.iscream.componentmanager.*;
9 import java.net.Socket;
10 import java.io.*;
11
12 /**
13 * Handles setting up a host.
14 * This class provides a host with appropriate configuration
15 * and a reference to a Filter to which it should pass data.
16 *
17 * @author $Author: tdb1 $
18 * @version $Id: HostInit.java,v 1.16 2001/02/07 13:47:22 tdb1 Exp $
19 */
20 class HostInit extends Thread {
21
22 //---FINAL ATTRIBUTES---
23
24 /**
25 * The current CVS revision of this class
26 */
27 public final String REVISION = "$Revision: 1.16 $";
28
29 //---STATIC METHODS---
30
31 //---CONSTRUCTORS---
32
33 /**
34 * Construct a new HostInit.
35 *
36 * @param socket The socket to which the host is connected
37 */
38 public HostInit(Socket socket) throws IOException {
39 _socket = socket;
40 // setup reader & writer
41 _socketIn = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
42 _socketOut = new PrintWriter(_socket.getOutputStream(), true);
43 _logger.write(toString(), Logger.SYSINIT, "created");
44 }
45
46 //---PUBLIC METHODS---
47
48 /**
49 * Main method in this class, which handles communicating with
50 * the host to determine it's setup.
51 */
52 public void run() {
53 try {
54 String inBound = _socketIn.readLine();
55 if (!inBound.equals("STARTCONFIG")) {
56 _socketOut.println("ERROR");
57 throw new IOException("protocol error - expected:STARTCONFIG got:" + inBound);
58 }
59
60 Configuration myConfig = _configManager.getConfiguration("Host." + _socket.getInetAddress().getHostName().toLowerCase());
61 if (myConfig == null) {
62 _socketOut.println("ERROR");
63 throw new IOException("error in host configuration");
64 } else {
65 _socketOut.println("OK");
66
67 // get lastmodified
68 inBound = _socketIn.readLine();
69 if(!inBound.equals("LASTMODIFIED")) {
70 // protocol error
71 _socketOut.println("ERROR");
72 throw new IOException("protocol error - expected:LASTMODIFIED got:" + inBound);
73 }
74 else {
75 // send info
76 _socketOut.println(myConfig.getLastModified());
77 }
78
79 // get config fileList
80 inBound = _socketIn.readLine();
81 if(!inBound.equals("FILELIST")) {
82 // protocol error
83 _socketOut.println("ERROR");
84 throw new IOException("protocol error - expected:FILELIST got:" + inBound);
85 }
86 else {
87 // send info
88 _socketOut.println(myConfig.getFileList());
89 }
90
91 // get properties
92 inBound = _socketIn.readLine();
93 while(!inBound.equals("ENDCONFIG")) {
94
95 // get the property
96 try {
97 String returnedProperty = myConfig.getProperty("Host."+inBound);
98
99 _socketOut.println(returnedProperty);
100
101 } catch (org.omg.CORBA.MARSHAL e) {
102 _socketOut.println("ERROR");
103 }
104 inBound = _socketIn.readLine();
105 }
106 _logger.write(toString(), Logger.SYSMSG, "configured host");
107 _socketOut.println("OK");
108
109 // get filter reference
110 inBound = _socketIn.readLine();
111 if(!inBound.equals("FILTER")) {
112 // protocol error
113 _socketOut.println("ERROR");
114 throw new IOException("protocol error - expected:FILTER got:" + inBound);
115 }
116 else {
117 // send info
118 String parentFilter = myConfig.getProperty("Host.filter");
119 _logger.write(toString(), Logger.DEBUG, " looking for parent - " + parentFilter);
120 Filter filter = FilterHelper.narrow(ReferenceManager.getInstance().getCORBARef("iscream.Filter." + parentFilter));
121 _socketOut.println(filter.getHostName() + ";"
122 + filter.getUDPPort() + ";"
123 + filter.getTCPPort());
124 }
125
126 // confirm that all is ok
127 inBound = _socketIn.readLine();
128 if(!inBound.equals("END")) {
129 // protocol error
130 _socketOut.println("ERROR");
131 throw new IOException("protocol error - expected:END got:" + inBound);
132 }
133 else {
134 // send ok
135 _socketOut.println("OK");
136 }
137
138 }
139
140 } catch (Exception e) {
141 _logger.write(toString(), Logger.ERROR, "ERROR - " + e);
142 }
143
144 _socketOut.flush();
145 // Disconnect streams & socket
146 try {
147 _socketIn.close();
148 _socketOut.close();
149 _socket.close();
150 } catch (IOException e) {
151 _logger.write(toString(), Logger.ERROR, "exception on socket close");
152 }
153 _logger.write(toString(), Logger.SYSMSG, "finished");
154 }
155
156 /**
157 * Overrides the {@link java.lang.Object#toString() Object.toString()}
158 * method to provide clean logging (every class should have this).
159 *
160 * This uses the uk.ac.ukc.iscream.util.NameFormat class
161 * to format the toString()
162 *
163 * @return the name of this class and its CVS revision
164 */
165 public String toString() {
166 return FormatName.getName(
167 _name,
168 getClass().getName(),
169 REVISION);
170 }
171
172 //---PRIVATE METHODS---
173
174 //---ACCESSOR/MUTATOR METHODS---
175
176 //---ATTRIBUTES---
177
178 /**
179 * This holds a reference to the
180 * system logger that is being used.
181 */
182 private Logger _logger = ReferenceManager.getInstance().getLogger();
183
184 /**
185 * A reference to the Configuration Manager the system is using
186 */
187 private ConfigurationManager _configManager = ReferenceManager.getInstance().getCM();
188
189 /**
190 * This is the friendly identifier of the
191 * component this class is running in.
192 * eg, a Filter may be called "filter1",
193 * If this class does not have an owning
194 * component, a name from the configuration
195 * can be placed here. This name could also
196 * be changed to null for utility classes.
197 */
198 private String _name = FilterManager.NAME;
199
200 /**
201 * The socket this class uses
202 */
203 private Socket _socket;
204
205 /**
206 * Used for the input stream of this socket
207 */
208 private BufferedReader _socketIn;
209
210 /**
211 * Used for the output stream of this socket
212 */
213 private PrintWriter _socketOut;
214
215 //---STATIC ATTRIBUTES---
216
217 }