42 |
|
String queueName = _name + " PacketSorterQueue"; |
43 |
|
_queue.startMonitor(queueMonitorInterval*1000, queueName); |
44 |
|
_hostMap = Collections.synchronizedMap(new HashMap()); |
45 |
+ |
_allHostDataList = Collections.synchronizedList(new LinkedList()); |
46 |
|
_allHostsList = Collections.synchronizedList(new LinkedList()); |
47 |
|
_logger.write(toString(), Logger.SYSINIT, "created"); |
48 |
|
} |
65 |
|
_logger.write(toString(), Logger.ERROR, "Queue failure: "+e); |
66 |
|
} |
67 |
|
|
68 |
< |
// find out which host this packet is actually for |
68 |
< |
XMLPacketMaker xmlPacketMaker = new XMLPacketMaker(xml); |
69 |
< |
XMLPacket packet = xmlPacketMaker.createXMLPacket(); |
68 |
> |
XMLPacket packet = null; |
69 |
|
|
70 |
+ |
try { |
71 |
+ |
XMLPacketMaker xmlPacketMaker = new XMLPacketMaker(xml); |
72 |
+ |
packet = xmlPacketMaker.createXMLPacket(); |
73 |
+ |
} catch(InvalidXMLException e) { |
74 |
+ |
_logger.write(toString(), Logger.ERROR, "Invalid XML: "+e); |
75 |
+ |
// skip the rest of this loop iteration |
76 |
+ |
continue; |
77 |
+ |
} |
78 |
+ |
|
79 |
|
String packetType = packet.getParam("packet.attributes.type"); |
80 |
|
// check if we need to send it regardless |
81 |
|
if(packetType.equals("data") || packetType.equals("heartbeat")) { |
93 |
|
|
94 |
|
// any handler in this list wants all packets, so send |
95 |
|
// it on to them regardless |
96 |
< |
Iterator i = _allHostsList.iterator(); |
96 |
> |
Iterator i = _allHostDataList.iterator(); |
97 |
|
while(i.hasNext()) { |
98 |
|
((Queue) i.next()).add(xml); |
99 |
|
} |
100 |
|
} |
101 |
|
else { |
102 |
< |
// send to all hosts because it's a special packet |
102 |
> |
// always send this packet to all hosts, because it's |
103 |
> |
// "extra" data, not host data |
104 |
|
Iterator i = _allHostsList.iterator(); |
105 |
|
while(i.hasNext()) { |
106 |
|
((Queue) i.next()).add(xml); |
122 |
|
* @param dhQueue a Queue being used by the DataHandler that is registering |
123 |
|
* @param hostList a semi-colon seperated list of hosts |
124 |
|
*/ |
125 |
< |
public void register(Queue dhQueue, String hostList) { |
125 |
> |
public synchronized void register(Queue dhQueue, String hostList) { |
126 |
|
// check to see if we want all hosts |
127 |
|
if(hostList.equals("")) { |
128 |
< |
_allHostsList.add(dhQueue); |
128 |
> |
_allHostDataList.add(dhQueue); |
129 |
|
_logger.write(toString(), Logger.SYSMSG, "registered DataHandler for all hosts"); |
130 |
|
} |
131 |
|
else { |
148 |
|
} |
149 |
|
_logger.write(toString(), Logger.SYSMSG, "registered DataHandler for hosts: "+hostList); |
150 |
|
} |
151 |
+ |
// always add host to our complete host list |
152 |
+ |
_allHostsList.add(dhQueue); |
153 |
|
} |
154 |
|
|
155 |
|
/** |
163 |
|
* @param dhQueue a Queue being used by the DataHandler that is deregistering |
164 |
|
* @param hostList a semi-colon seperated list of hosts |
165 |
|
*/ |
166 |
< |
public void deregister(Queue dhQueue, String hostList) { |
166 |
> |
public synchronized void deregister(Queue dhQueue, String hostList) { |
167 |
|
// go through the list of hosts |
168 |
|
if(hostList.equals("")) { |
169 |
< |
_allHostsList.remove(dhQueue); |
169 |
> |
_allHostDataList.remove(dhQueue); |
170 |
|
_logger.write(toString(), Logger.SYSMSG, "deregistered DataHandler for all hosts"); |
171 |
|
} |
172 |
|
else { |
186 |
|
} |
187 |
|
_logger.write(toString(), Logger.SYSMSG, "deregistered DataHandler for hosts: "+hostList); |
188 |
|
} |
189 |
+ |
// always remove host from our complete host list |
190 |
+ |
_allHostsList.remove(dhQueue); |
191 |
|
} |
192 |
|
|
193 |
|
/** |
254 |
|
/** |
255 |
|
* A list specifically for a Queue's associated with DataHandlers |
256 |
|
* that want all host information. |
257 |
+ |
*/ |
258 |
+ |
private List _allHostDataList; |
259 |
+ |
|
260 |
+ |
/** |
261 |
+ |
* A list of all hosts. |
262 |
|
*/ |
263 |
|
private List _allHostsList; |
264 |
|
|