// ------------------------------------------------------------ public void removeModule(Address addr) { Enumeration e = virtual.keys(); Address key = addr; while (e.hasMoreElements()) { Address k = (Address) e.nextElement(); if (k.equals(addr)) { virtual.remove(key); layer.shutdown(addr); layer.removeInterface(addr); return; } } }
// ------------------------------------------------------------ private void distributeExternal(Message mess) { Address target = mess.getHeader().getDestinationAddress(); if (matchesExternal(target)) { log("Send to external MBus too\n\n"); layer.send(mess); } }
/** * Returns a list of entities that are currently on the MBus. * * @return Addresses of the entites */ public Address[] getKnownEntities() { Address[] ext = layer.getKnownEntities(); Address[] ret = new Address[ext.length + virtual.size()]; int i = 0; for (i = 0; i < ext.length; i++) ret[i] = ext[i]; Enumeration e = virtual.elements(); while (e.hasMoreElements()) ret[i++] = ((MessageBus) e.nextElement()).getAddress(); return ret; }
// ------------------------------------------------------------ public void addModule(VirtualMBusListener mod, Address addr) { Enumeration e = virtual.keys(); Address key = addr; while (e.hasMoreElements()) { Address k = (Address) e.nextElement(); if (k.equals(addr)) { key = k; break; } } // Add module to listeners virtual.put(key, mod); layer.addInterface(addr); }
// ------------------------------------------------------------ public VirtualTransportLayer(boolean spy) throws MBusException { ackQueue = new Hashtable(); virtual = new Hashtable(); external = new Vector(); spyable = spy; // Create broadcast-address String[][] voidArray = {}; allTargets = new Address(voidArray); layer = new SimpleTransportLayer(new Address[0], this); // Register the elements that are known by now Address[] tmp = layer.getKnownEntities(); for (int i = 0; i < tmp.length; i++) external.addElement(tmp[i]); }
// ------------------------------------------------------------ public MBusConfiguration getConfig() { return layer.getConfig(); }
/** * Tell all entities that a single entity leaves the MBus. * * @param addr Address of the entity that leaves */ public void close() { Enumeration e = virtual.keys(); while (e.hasMoreElements()) removeModule((Address) e.nextElement()); layer.close(); }