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/UDPReader.java
Revision: 1.11
Committed: Wed Dec 13 21:11:26 2000 UTC (23 years, 5 months ago) by ajm
Branch: MAIN
Changes since 1.10: +38 -6 lines
Log Message:
updated for new toString etc.

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.ac.ukc.iscream.filter;
3
4 //---IMPORTS---
5 import java.io.*;
6 import java.net.*;
7 import java.util.*;
8 import uk.ac.ukc.iscream.core.*;
9 import uk.ac.ukc.iscream.filter.*;
10 import uk.ac.ukc.iscream.util.*;
11
12 /**
13 * This class contains the main method to be run by
14 * the filter children. It harvests UDP traffic.
15 *
16 * @author $Author: ajm4 $
17 * @version $Id: UDPReader.java,v 1.10 2000/12/13 13:36:46 ajm4 Exp $
18 */
19 public class UDPReader extends Thread{
20
21 //---FINAL ATTRIBUTES---
22
23 /**
24 * The current CVS revision of this class
25 */
26 public final String REVISION = "$Revision: 1.10 $";
27
28 /**
29 * The maximum size of a packet
30 */
31 private final int packetSizeLimit = 8192;
32
33 //---STATIC METHODS---
34
35 //---CONSTRUCTORS---
36
37 /**
38 * It is normal to use this constructor in preference
39 * to any other in this class.
40 */
41 public UDPReader(int port, Filter parent){
42 _port = port;
43 _parent = parent;
44 }
45
46 //---PUBLIC METHODS---
47
48 public void run() {
49
50 DatagramSocket socket = null;
51 try {
52 socket = new DatagramSocket(_port);
53 }
54 catch (BindException e){
55 _logger.write(this.toString(), Logger.FATAL, "Could not start the UDPReader thread on port "+_port+" as this port was already in use.");
56 return;
57 }
58 catch (Exception e){
59 _logger.write(this.toString(), Logger.FATAL, "Could not start the UDPReader thread on port "+_port+".");
60 return;
61 }
62
63 _logger.write(this.toString(), Logger.SYSMSG, "UDPReader thread ready and listening for UDP packets on port "+_port);
64
65 byte[] buf;
66
67 boolean running = true;
68 while (running){
69 try {
70
71 // receive request and pass on to the FilterThread.
72 buf = new byte[packetSizeLimit];
73 DatagramPacket packet = new DatagramPacket(buf, buf.length);
74 socket.receive(packet);
75 FilterThread t = new FilterThread(packet, _parent);
76 t.start();
77
78 }
79 catch (IOException e) {
80 _logger.write(this.toString(), Logger.WARNING, "This UDPReader thread has been shut down as an exception occured: "+e);
81 return;
82 }
83 }
84 socket.close();
85 }
86
87 /**
88 * Overrides the {@link java.lang.Object#toString() Object.toString()}
89 * method to provide clean logging (every class should have this).
90 *
91 * This uses the uk.ac.ukc.iscream.util.NameFormat class
92 * to format the toString()
93 *
94 * @return the name of this class and its CVS revision
95 */
96 public String toString() {
97 return FormatName.getName(
98 _name,
99 getClass().getName(),
100 REVISION);
101 }
102
103 //---PRIVATE METHODS---
104
105 //---ACCESSOR/MUTATOR METHODS---
106
107 //---ATTRIBUTES---
108
109 /**
110 * This is the friendly identifier of the
111 * component this class is running in.
112 * eg, a Filter may be called "filter1",
113 * If this class does not have an owning
114 * component, a name from the configuration
115 * can be placed here. This name could also
116 * be changed to null for utility classes.
117 */
118 private String _name = FilterMain.NAME;
119
120 /**
121 * This holds a reference to the
122 * system logger that is being used.
123 */
124 private Logger _logger = ReferenceManager.getInstance().getLogger();
125
126 /**
127 * The port that this reader is using
128 */
129 int _port;
130
131 /**
132 * The parent of this filter
133 */
134 Filter _parent;
135
136 //---STATIC ATTRIBUTES---
137
138 }