ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/filter/TCPReader.java
Revision: 1.5
Committed: Wed Dec 13 13:36:46 2000 UTC (23 years, 5 months ago) by ajm
Branch: MAIN
Changes since 1.4: +24 -8 lines
Log Message:
componenterized the filter and tidied all child classes, no all conform to toString standard

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.ac.ukc.iscream.filter;
3
4 //---IMPORTS---
5 import uk.ac.ukc.iscream.core.*;
6 import uk.ac.ukc.iscream.filter.*;
7 import java.net.Socket;
8 import java.net.ServerSocket;
9 import java.io.OutputStream;
10 import java.io.IOException;
11 import java.net.InetAddress;
12 import java.net.UnknownHostException;
13 import uk.ac.ukc.iscream.util.*;
14
15 /**
16 * A socket listener to listen for new hosts registering with the system.
17 * When a host makes a connection, the connecton is past to an instance
18 * of the HostInit class, which handles further communication.
19 *
20 * @author $Author: ajm4 $
21 * @version $Id: TCPReader.java,v 1.4 2000/11/30 02:38:09 ajm4 Exp $
22 */
23 class TCPReader extends Thread {
24
25 //---FINAL ATTRIBUTES---
26
27 /**
28 * The current CVS revision of this class
29 */
30 public final String REVISION = "$Revision: 1.4 $";
31
32 //---STATIC METHODS---
33
34 //---CONSTRUCTORS---
35
36 /**
37 * Constructs a new listener
38 *
39 * @param logger a reference to the logger we are using
40 * @param configManager a reference to the ConfigurationManager we are using
41 * @param port The port that the server will listen on.
42 */
43 public TCPReader(int port, Filter parent) {
44 _port = port;
45 _parent = parent;
46 _logger.write(toString(), Logger.SYSINIT, "started");
47 }
48
49
50
51 //---PUBLIC METHODS---
52
53 /**
54 * The run() method is the main loop for this thread, and we
55 * will remain in here until such a point as something goes
56 * wrong with the listening. After initially setting up the
57 * ServerSocket we go round a while loop receiving connections
58 * and then passing them off to other processes to deal with.
59 */
60 public void run(){
61 ServerSocket listenPort=null;
62 // We use this boolean so we can break out of the while loop if we want
63 boolean run = true;
64 try{
65 // Setup the ServerSocket so that clients can connect
66 listenPort = new ServerSocket(_port);
67 }
68 catch(IOException e){
69 }
70 // Log what machine/port we're listening on
71 try{
72 _logger.write(toString(), Logger.SYSMSG, "TCPReader listening on "
73 +InetAddress.getLocalHost().getHostName()
74 +"/"+InetAddress.getLocalHost().getHostAddress()
75 +" port "+listenPort.getLocalPort());
76 }
77 catch(UnknownHostException e){
78 _logger.write(toString(), Logger.SYSMSG, "TCPReader listening on UnknownHost "
79 +"port "+listenPort.getLocalPort());
80 }
81 // Loop round constantly until we decide to stop
82 while(run){
83 Socket hostSocket=null;
84 try{
85 _logger.write(toString(), Logger.SYSMSG, "Waiting for Connection");
86 // This will block until a host connects - at which point we get a Socket
87 hostSocket = listenPort.accept();
88 _logger.write(toString(), Logger.SYSMSG, "Connection accepted from: " + hostSocket.toString());
89 }
90 catch(IOException e){
91 // Something went wrong with the ServerSocket, so we'll stop listening
92 run=false;
93 }
94 // If we've stopped on the line above we won't want to try this !
95 if(run){
96 try {
97 // Setup the HostInit so it can carry on communications with the host
98 TCPReaderInit init = new TCPReaderInit(hostSocket, _parent);
99 // and start it
100 init.start();
101 } catch (IOException e) {
102 _logger.write(toString(), Logger.ERROR, e.toString());
103 }
104 }
105 }
106 // Best log the fact that we're stopping
107 _logger.write(toString(), Logger.FATAL, "Fatal error, shutdown pending");
108 }
109
110 /**
111 * Overrides the {@link java.lang.Object#toString() Object.toString()}
112 * method to provide clean logging (every class should have this).
113 *
114 * This uses the uk.ac.ukc.iscream.util.NameFormat class
115 * to format the toString()
116 *
117 * @return the name of this class and its CVS revision
118 */
119 public String toString() {
120 return FormatName.getName(
121 _name,
122 getClass().getName(),
123 REVISION);
124 }
125
126 //---PRIVATE METHODS---
127
128 //---ACCESSOR/MUTATOR METHODS---
129
130 //---ATTRIBUTES---
131
132 /**
133 * This is the friendly identifier of the
134 * component this class is running in.
135 * eg, a Filter may be called "filter1",
136 * If this class does not have an owning
137 * component, a name from the configuration
138 * can be placed here. This name could also
139 * be changed to null for utility classes.
140 */
141 private String _name = FilterMain.NAME;
142
143 /**
144 * This holds a reference to the
145 * system logger that is being used.
146 */
147 private Logger _logger = ReferenceManager.getInstance().getLogger();
148
149 /**
150 * The port on which the server should listen.
151 */
152 private int _port;
153
154 private Filter _parent;
155
156 //---STATIC ATTRIBUTES---
157
158 }