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.16
Committed: Wed Feb 7 13:47:22 2001 UTC (23 years, 3 months ago) by tdb
Branch: MAIN
Changes since 1.15: +3 -16 lines
Log Message:
Made use of the autoflush feature of PrintWriter.

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2 tdb 1.9 package uk.ac.ukc.iscream.filtermanager;
3 tdb 1.1
4     //---IMPORTS---
5     import uk.ac.ukc.iscream.core.*;
6 tdb 1.7 import uk.ac.ukc.iscream.filter.*;
7 tdb 1.11 import uk.ac.ukc.iscream.util.*;
8 tdb 1.14 import uk.ac.ukc.iscream.componentmanager.*;
9 tdb 1.1 import java.net.Socket;
10     import java.io.*;
11    
12     /**
13 tdb 1.11 * Handles setting up a host.
14 ajm 1.12 * This class provides a host with appropriate configuration
15     * and a reference to a Filter to which it should pass data.
16 tdb 1.1 *
17 tdb 1.15 * @author $Author: tdb1 $
18 tdb 1.16 * @version $Id: HostInit.java,v 1.15 2001/01/28 05:38:13 tdb1 Exp $
19 tdb 1.1 */
20     class HostInit extends Thread {
21    
22     //---FINAL ATTRIBUTES---
23    
24     /**
25     * The current CVS revision of this class
26     */
27 tdb 1.16 public final String REVISION = "$Revision: 1.15 $";
28 tdb 1.1
29     //---STATIC METHODS---
30    
31     //---CONSTRUCTORS---
32    
33 tdb 1.15 /**
34     * Construct a new HostInit.
35     *
36     * @param socket The socket to which the host is connected
37     */
38 tdb 1.11 public HostInit(Socket socket) throws IOException {
39 tdb 1.1 _socket = socket;
40 tdb 1.15 // setup reader & writer
41 tdb 1.1 _socketIn = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
42 tdb 1.16 _socketOut = new PrintWriter(_socket.getOutputStream(), true);
43 tdb 1.11 _logger.write(toString(), Logger.SYSINIT, "created");
44 tdb 1.1 }
45    
46     //---PUBLIC METHODS---
47    
48 tdb 1.15 /**
49     * Main method in this class, which handles communicating with
50     * the host to determine it's setup.
51     */
52 tdb 1.1 public void run() {
53     try {
54     String inBound = _socketIn.readLine();
55     if (!inBound.equals("STARTCONFIG")) {
56     _socketOut.println("ERROR");
57 tdb 1.7 throw new IOException("protocol error - expected:STARTCONFIG got:" + inBound);
58 tdb 1.1 }
59    
60 ajm 1.8 Configuration myConfig = _configManager.getConfiguration("Host." + _socket.getInetAddress().getHostName().toLowerCase());
61 tdb 1.1 if (myConfig == null) {
62     _socketOut.println("ERROR");
63 tdb 1.7 throw new IOException("error in host configuration");
64 tdb 1.1 } else {
65     _socketOut.println("OK");
66    
67 tdb 1.2 // get lastmodified
68     inBound = _socketIn.readLine();
69 tdb 1.4 if(!inBound.equals("LASTMODIFIED")) {
70     // protocol error
71 tdb 1.2 _socketOut.println("ERROR");
72 tdb 1.7 throw new IOException("protocol error - expected:LASTMODIFIED got:" + inBound);
73 tdb 1.4 }
74     else {
75     // send info
76     _socketOut.println(myConfig.getLastModified());
77 tdb 1.2 }
78    
79 tdb 1.7 // 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 tdb 1.2 // get properties
92 tdb 1.1 inBound = _socketIn.readLine();
93     while(!inBound.equals("ENDCONFIG")) {
94    
95     // get the property
96     try {
97 tdb 1.10 String returnedProperty = myConfig.getProperty("Host."+inBound);
98 tdb 1.1
99     _socketOut.println(returnedProperty);
100    
101     } catch (org.omg.CORBA.MARSHAL e) {
102     _socketOut.println("ERROR");
103     }
104     inBound = _socketIn.readLine();
105     }
106 tdb 1.11 _logger.write(toString(), Logger.SYSMSG, "configured host");
107 tdb 1.1 _socketOut.println("OK");
108 tdb 1.7
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 tdb 1.11 _logger.write(toString(), Logger.DEBUG, " looking for parent - " + parentFilter);
120     Filter filter = FilterHelper.narrow(ReferenceManager.getInstance().getCORBARef("iscream.Filter." + parentFilter));
121 tdb 1.7 _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 tdb 1.1 }
139    
140     } catch (Exception e) {
141 ajm 1.12 _logger.write(toString(), Logger.ERROR, "ERROR - " + e.getMessage());
142 tdb 1.1 }
143    
144     _socketOut.flush();
145     // Disconnect streams & socket
146     try {
147     _socketIn.close();
148     _socketOut.close();
149     _socket.close();
150     } catch (IOException e) {
151 tdb 1.11 _logger.write(toString(), Logger.ERROR, "exception on socket close");
152 tdb 1.1 }
153 tdb 1.11 _logger.write(toString(), Logger.SYSMSG, "finished");
154 tdb 1.1 }
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 ajm 1.12 * This uses the uk.ac.ukc.iscream.util.NameFormat class
161     * to format the toString()
162     *
163 tdb 1.1 * @return the name of this class and its CVS revision
164     */
165     public String toString() {
166 ajm 1.12 return FormatName.getName(
167     _name,
168 ajm 1.13 getClass().getName(),
169 ajm 1.12 REVISION);
170 tdb 1.1 }
171    
172     //---PRIVATE METHODS---
173    
174     //---ACCESSOR/MUTATOR METHODS---
175    
176     //---ATTRIBUTES---
177    
178 tdb 1.11 /**
179 ajm 1.12 * This holds a reference to the
180     * system logger that is being used.
181 tdb 1.11 */
182 ajm 1.12 private Logger _logger = ReferenceManager.getInstance().getLogger();
183 tdb 1.11
184     /**
185     * A reference to the Configuration Manager the system is using
186     */
187 ajm 1.12 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 tdb 1.11
210 ajm 1.12 /**
211     * Used for the output stream of this socket
212     */
213     private PrintWriter _socketOut;
214 tdb 1.11
215 tdb 1.1 //---STATIC ATTRIBUTES---
216    
217     }