ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/clientinterface/PacketSorter.java
Revision: 1.3
Committed: Tue Jan 23 18:23:03 2001 UTC (23 years, 3 months ago) by tdb
Branch: MAIN
Changes since 1.2: +10 -7 lines
Log Message:
General bug fixing. It now works for the features it should.

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2     package uk.ac.ukc.iscream.clientinterface;
3    
4     //---IMPORTS---
5     import uk.ac.ukc.iscream.util.*;
6     import uk.ac.ukc.iscream.componentmanager.*;
7     import uk.ac.ukc.iscream.core.*;
8     import java.util.*;
9    
10     /**
11     * Receives data from the incoming CORBA servant, places
12     * it in a Queue, and then arranges distribution to the
13     * ClientHandlers.
14     *
15 tdb 1.2 * @author $Author: tdb1 $
16 tdb 1.3 * @version $Id: PacketSorter.java,v 1.2 2001/01/23 17:22:01 tdb1 Exp $
17 tdb 1.1 */
18     class PacketSorter extends Thread {
19    
20     //---FINAL ATTRIBUTES---
21    
22     /**
23     * The current CVS revision of this class
24     */
25 tdb 1.3 public final String REVISION = "$Revision: 1.2 $";
26 tdb 1.1
27     //---STATIC METHODS---
28    
29     //---CONSTRUCTORS---
30    
31     /**
32     * Creates a new PacketSorter.
33     */
34     public PacketSorter() {
35     _queue = new Queue();
36     _hostMap = new HashMap();
37 tdb 1.2 _allHostsList = new LinkedList();
38 tdb 1.1 _logger.write(toString(), Logger.SYSINIT, "created");
39     }
40    
41     //---PUBLIC METHODS---
42    
43     public void run() {
44     int qID = _queue.getQueue();
45     while(true) {
46     String xml = "";
47     try {
48     xml = (String) _queue.get(qID);
49     }
50     catch(InvalidQueueException e) {
51     _logger.write(toString(), Logger.ERROR, "Queue failure: "+e);
52     }
53    
54 tdb 1.2 // look at host map
55    
56 tdb 1.1 // should be a neater way to do this
57 tdb 1.3 XMLPacketMaker xmlPacketMaker = new XMLPacketMaker(xml);
58     XMLPacket packet = xmlPacketMaker.createXMLPacket();
59 tdb 1.1 String host = packet.getParam("packet.attributes.machine_name");
60    
61 tdb 1.3 if(_hostMap.containsKey(host)) {
62     LinkedList list = (LinkedList) _hostMap.get(host);
63     Iterator i = list.iterator();
64     while(i.hasNext()) {
65     ((Queue) i.next()).add(xml);
66     }
67 tdb 1.1 }
68 tdb 1.2
69     // look at all hosts
70    
71     Iterator j = _allHostsList.iterator();
72     while(j.hasNext()) {
73     ((Queue) j.next()).add(xml);
74     }
75 tdb 1.1 }
76     }
77    
78     // MUST DEAL WITH hostList="" implying "all hosts"
79    
80     public void register(Queue dhQueue, String hostList) {
81 tdb 1.2 if(hostList.equals("")) {
82     _allHostsList.add(dhQueue);
83     _logger.write(toString(), Logger.SYSMSG, "registered DataHandler for all hosts");
84     }
85     else {
86     StringTokenizer st = new StringTokenizer(hostList, ";");
87     while(st.hasMoreTokens()) {
88     String host = st.nextToken();
89     if(_hostMap.containsKey(host)) {
90     LinkedList list = (LinkedList) _hostMap.get(host);
91     list.add(dhQueue);
92     }
93     else {
94     LinkedList list = new LinkedList();
95     list.add(dhQueue);
96     _hostMap.put(host, list);
97     }
98 tdb 1.1 }
99 tdb 1.2 _logger.write(toString(), Logger.SYSMSG, "registered DataHandler for hosts: "+hostList);
100 tdb 1.1 }
101     }
102    
103     public void deregister(Queue dhQueue, String hostList) {
104 tdb 1.2 if(hostList.equals("")) {
105     _allHostsList.remove(dhQueue);
106     _logger.write(toString(), Logger.SYSMSG, "deregistered DataHandler for all hosts");
107     }
108     else {
109     StringTokenizer st = new StringTokenizer(hostList, ";");
110     while(st.hasMoreTokens()) {
111     String host = st.nextToken();
112     if(_hostMap.containsKey(host)) {
113     LinkedList list = (LinkedList) _hostMap.get(host);
114     list.remove(dhQueue);
115     if(list.size()==0) {
116     _hostMap.remove(host);
117     }
118 tdb 1.1 }
119     }
120 tdb 1.2 _logger.write(toString(), Logger.SYSMSG, "deregistered DataHandler for hosts: "+hostList);
121 tdb 1.1 }
122     }
123    
124     /**
125     * Overrides the {@link java.lang.Object#toString() Object.toString()}
126     * method to provide clean logging (every class should have this).
127     *
128     * This uses the uk.ac.ukc.iscream.util.NameFormat class
129     * to format the toString()
130     *
131     * @return the name of this class and its CVS revision
132     */
133     public String toString() {
134     return FormatName.getName(
135     _name,
136     getClass().getName(),
137     REVISION);
138     }
139    
140     //---PRIVATE METHODS---
141    
142     //---ACCESSOR/MUTATOR METHODS---
143    
144     public Queue getQueue() {
145     return _queue;
146     }
147    
148     //---ATTRIBUTES---
149    
150     /**
151     * This is the friendly identifier of the
152     * component this class is running in.
153     * eg, a Filter may be called "filter1",
154     * If this class does not have an owning
155     * component, a name from the configuration
156     * can be placed here. This name could also
157     * be changed to null for utility classes.
158     */
159     private String _name = ClientInterfaceMain.NAME;
160    
161     /**
162     * This holds a reference to the
163     * system logger that is being used.
164     */
165     private Logger _logger = ReferenceManager.getInstance().getLogger();
166    
167     private Queue _queue;
168    
169     private HashMap _hostMap;
170 tdb 1.2 private LinkedList _allHostsList;
171 tdb 1.1
172     //---STATIC ATTRIBUTES---
173    
174     }