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.13
Committed: Thu Jan 18 23:16:21 2001 UTC (23 years, 4 months ago) by tdb
Branch: MAIN
Changes since 1.12: +4 -3 lines
Log Message:
Changes to reflect move of Component, ComponentStartException, and the
ReferenceManager from util to componentmanager.

File Contents

# User Rev Content
1 tdb 1.6 //---PACKAGE DECLARATION---
2     package uk.ac.ukc.iscream.filter;
3    
4     //---IMPORTS---
5 pjm2 1.1 import java.io.*;
6     import java.net.*;
7     import java.util.*;
8 tdb 1.2 import uk.ac.ukc.iscream.core.*;
9 tdb 1.13 import uk.ac.ukc.iscream.componentmanager.*;
10 tdb 1.2 import uk.ac.ukc.iscream.filter.*;
11 ajm 1.9 import uk.ac.ukc.iscream.util.*;
12 pjm2 1.1
13 tdb 1.6 /**
14     * This class contains the main method to be run by
15     * the filter children. It harvests UDP traffic.
16     *
17 tdb 1.13 * @author $Author: tdb1 $
18     * @version $Id: UDPReader.java,v 1.12 2001/01/12 00:45:25 tdb1 Exp $
19 tdb 1.6 */
20 pjm2 1.1 public class UDPReader extends Thread{
21    
22 tdb 1.6 //---FINAL ATTRIBUTES---
23    
24     /**
25     * The current CVS revision of this class
26     */
27 tdb 1.13 public final String REVISION = "$Revision: 1.12 $";
28 ajm 1.11
29     /**
30     * The maximum size of a packet
31     */
32     private final int packetSizeLimit = 8192;
33 tdb 1.6
34     //---STATIC METHODS---
35    
36     //---CONSTRUCTORS---
37    
38 ajm 1.10 /**
39     * It is normal to use this constructor in preference
40     * to any other in this class.
41     */
42 tdb 1.12 public UDPReader(int port, Queue queue){
43 tdb 1.8 _port = port;
44 tdb 1.12 _queue = queue;
45 pjm2 1.1 }
46    
47 tdb 1.6 //---PUBLIC METHODS---
48    
49 pjm2 1.1 public void run() {
50    
51     DatagramSocket socket = null;
52     try {
53 tdb 1.8 socket = new DatagramSocket(_port);
54 pjm2 1.1 }
55     catch (BindException e){
56 tdb 1.8 _logger.write(this.toString(), Logger.FATAL, "Could not start the UDPReader thread on port "+_port+" as this port was already in use.");
57 pjm2 1.1 return;
58     }
59     catch (Exception e){
60 tdb 1.8 _logger.write(this.toString(), Logger.FATAL, "Could not start the UDPReader thread on port "+_port+".");
61 pjm2 1.1 return;
62     }
63    
64 tdb 1.8 _logger.write(this.toString(), Logger.SYSMSG, "UDPReader thread ready and listening for UDP packets on port "+_port);
65 pjm2 1.1
66     byte[] buf;
67    
68     boolean running = true;
69     while (running){
70     try {
71 pjm2 1.3
72 tdb 1.12 // receive request and put it in the Queue
73 pjm2 1.1 buf = new byte[packetSizeLimit];
74     DatagramPacket packet = new DatagramPacket(buf, buf.length);
75     socket.receive(packet);
76 tdb 1.12 String xml = new String(packet.getData());
77     _queue.add(xml);
78 pjm2 1.1 }
79     catch (IOException e) {
80 tdb 1.8 _logger.write(this.toString(), Logger.WARNING, "This UDPReader thread has been shut down as an exception occured: "+e);
81 pjm2 1.1 return;
82     }
83     }
84     socket.close();
85     }
86 tdb 1.6
87     /**
88     * Overrides the {@link java.lang.Object#toString() Object.toString()}
89     * method to provide clean logging (every class should have this).
90     *
91 ajm 1.11 * This uses the uk.ac.ukc.iscream.util.NameFormat class
92     * to format the toString()
93     *
94 tdb 1.6 * @return the name of this class and its CVS revision
95     */
96     public String toString() {
97 ajm 1.11 return FormatName.getName(
98     _name,
99     getClass().getName(),
100     REVISION);
101 tdb 1.6 }
102    
103     //---PRIVATE METHODS---
104    
105     //---ACCESSOR/MUTATOR METHODS---
106    
107     //---ATTRIBUTES---
108    
109 ajm 1.11 /**
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 tdb 1.8 int _port;
130 ajm 1.11
131     /**
132 tdb 1.12 * The Queue object
133 ajm 1.11 */
134 tdb 1.12 Queue _queue;
135 tdb 1.6
136     //---STATIC ATTRIBUTES---
137    
138 pjm2 1.1 }