public synchronized void messageReceived(int to, Message m) { DrainMsg mhMsg = (DrainMsg) m; log.debug( "incoming: localDest: " + to + " type:" + mhMsg.get_type() + " hops:" + (16 - mhMsg.get_ttl()) + " seqNo:" + mhMsg.get_seqNo() + " source:" + mhMsg.get_source() + " finalDest:" + mhMsg.get_dest()); // lets assume that the network cannot buffer more than 25 drain msgs from a single source at a // time (should be more than reasonable) if (seqNos.containsKey(new Integer(mhMsg.get_source()))) { int oldSeqNo = ((Integer) seqNos.get(new Integer(mhMsg.get_source()))).intValue(); int upperBound = mhMsg.get_seqNo() + 25; int wrappedUpperBound = 25 - (255 - mhMsg.get_seqNo()); if ((oldSeqNo >= mhMsg.get_seqNo() && oldSeqNo < upperBound) || (oldSeqNo >= 0 && oldSeqNo < wrappedUpperBound)) { log.debug( "Dropping message from " + mhMsg.get_source() + " with duplicate seqNo: " + mhMsg.get_seqNo()); return; } } seqNos.put(new Integer(mhMsg.get_source()), new Integer(mhMsg.get_seqNo())); if (to != spAddr && to != MoteIF.TOS_BCAST_ADDR && to != TOS_UART_ADDR) { log.debug("Dropping message not for me."); return; } HashSet promiscuousSet = (HashSet) idTable.get(new Integer(BCAST_ID)); HashSet listenerSet = (HashSet) idTable.get(new Integer(mhMsg.get_type())); if (listenerSet != null && promiscuousSet != null) { listenerSet.addAll(promiscuousSet); } else if (listenerSet == null && promiscuousSet != null) { listenerSet = promiscuousSet; } if (listenerSet == null) { log.debug("No Listener for type: " + mhMsg.get_type()); return; } for (Iterator it = listenerSet.iterator(); it.hasNext(); ) { MessageListener ml = (MessageListener) it.next(); ml.messageReceived(to, mhMsg); } }
public void deregisterListener(int id, MessageListener m) { HashSet listenerSet = (HashSet) idTable.get(new Integer(id)); if (listenerSet == null) { throw new IllegalArgumentException("No listeners registered for message type " + id); } listenerSet.remove(m); }
public void registerListener(int id, MessageListener m) { HashSet listenerSet = (HashSet) idTable.get(new Integer(id)); if (listenerSet == null) { listenerSet = new HashSet(); idTable.put(new Integer(id), listenerSet); } listenerSet.add(m); log.info("New Listener for id=" + id); }
public void addRequestForStream(StreamDataSource sds, int serial) { if (afterLoadMap.containsKey(sds)) { List sList = (List) afterLoadMap.get(sds); sList.add(new Integer(serial)); } else { List sList = new LinkedList(); sList.add(new Integer(serial)); afterLoadMap.put(sds, sList); } }
public void loadStreams() throws Exception { Config config = Config.getConfiguration("manager.streams"); afterLoadMap = new HashMap(); Object[] names = config.getArray("streams", null); if (names == null) { return; } for (int i = 0; i < names.length; i++) { StreamDataSource sds = new StreamDataSource(names[i].toString()); sds.load(); sds.initiate(); addStreamNoFire(sds); addDefault(sds); } Iterator it = afterLoadMap.keySet().iterator(); while (it.hasNext()) { StreamDataSource sds = (StreamDataSource) it.next(); List sList = (List) afterLoadMap.get(sds); Iterator addIt = sList.iterator(); while (addIt.hasNext()) { Integer serial = (Integer) addIt.next(); StreamDataSource addStream = getStream(serial.intValue()); if (addStream != null) { sds.addStream(addStream); } else { logger.warn("Unable to find source (" + serial + ") for " + sds); } } } afterLoadMap = null; }
public StreamDataSource getStream(int serial) { return (StreamDataSource) serialToStream.get(new Integer(serial)); }