- private class RxLoop implements Runnable {
- public void run() {
- RawPacket pkt;
- try {
- for (pkt = rxQueue.take(); pkt != null; pkt = rxQueue.take()) {
- for (List<DataPacketListener> serialListeners : listenDataPacket) {
- int i = 0;
- for (i = 0; i < serialListeners.size(); i++) {
- RawPacket copyPkt = null;
- try {
- copyPkt = new RawPacket(pkt);
- } catch (ConstructionException cex) {
- logger.debug("Error while cloning the packet");
- }
- if (copyPkt == null) {
- increaseStat("RXPacketCopyFailed");
- continue;
- }
- DataPacketListener l = serialListeners.get(i);
- IListenDataPacket s = (l == null ? null
- : l.listener);
- if (s != null) {
- try {
- // TODO Make sure to filter based
- // on the match too, later on
- PacketResult res = s
- .receiveDataPacket(copyPkt);
- increaseStat("RXPacketSuccess");
- if (res.equals(PacketResult.CONSUME)) {
- increaseStat("RXPacketSerialExit");
- break;
- }
- } catch (Exception e) {
- increaseStat("RXPacketFailedForException");
- }
- }
+ private void dispatchPacket(RawPacket pkt) {
+
+ // for now we treat all listeners as serial listeners
+ for (List<DataPacketListener> serialListeners : listenDataPacket) {
+ for (DataPacketListener l : serialListeners) {
+
+ // TODO: possibly deal with read-only and read-write packet
+ // copies
+ IListenDataPacket s = (l == null ? null : l.listener);
+ if (s != null) {
+ try {
+ // TODO Make sure to filter based on the match too,
+ // later on
+ PacketResult res = s.receiveDataPacket(pkt);
+ increaseStat("RXPacketSuccess");
+ if (res.equals(PacketResult.CONSUME)) {
+ increaseStat("RXPacketSerialExit");
+ break;