protected void route(String group, Address dest, byte[] msg, int offset, int length) { ConcurrentMap<Address,Entry> map=address_mappings.get(group); if(map == null) return; if(dest != null) { // unicast Entry entry=map.get(dest); if(entry != null) sendToMember(entry.client_addr, msg, offset, length); else log.warn("dest %s in cluster %s not found", dest, group); } else { // multicast - send to all members in group Set<Map.Entry<Address,Entry>> dests=map.entrySet(); sendToAllMembersInGroup(dests, msg, offset, length); } }
private void sendToAllMembersInGroup(String groupname, byte[] msg, Address sender) { Map val; val=routingTable.get(groupname); if(val == null || val.isEmpty()) return; Map.Entry tmp; AddressEntry entry; synchronized(val) { for(Iterator i=val.entrySet().iterator(); i.hasNext();) { tmp=(Map.Entry)i.next(); entry=(GossipRouter.AddressEntry)tmp.getValue(); DataOutputStream dos=entry.output; if(dos != null) { // send only to 'connected' members try { sendToMember(null, dos, msg, sender); } catch(Exception e) { if(log.isWarnEnabled()) log.warn("cannot send to " + entry.logical_addr + ": " + e.getMessage()); entry.destroy(); // this closes the socket i.remove(); } } } } }
protected void route(String group, Address dest, byte[] msg, int offset, int length) { ConcurrentMap<Address,Entry> map=address_mappings.get(group); if(map == null) return; if(dest != null) { // unicast Entry entry=map.get(dest); if(entry != null) sendToMember(entry.client_addr, msg, offset, length); else log.warn("dest %s in cluster %s not found", dest, group); } else { // multicast - send to all members in group Set<Map.Entry<Address,Entry>> dests=map.entrySet(); sendToAllMembersInGroup(dests, msg, offset, length); } }
sendToMember(dest, ae.output, msg, sender);