1 45 package org.exolab.jms.net.connector; 46 47 import java.util.ArrayList ; 48 import java.util.Collections ; 49 import java.util.HashMap ; 50 import java.util.List ; 51 import java.util.Map ; 52 53 import org.exolab.jms.net.uri.InvalidURIException; 54 import org.exolab.jms.net.uri.URI; 55 import org.exolab.jms.net.uri.URIHelper; 56 57 58 65 public class MulticastCallerListener implements CallerListener { 66 67 71 private Map _listeners = Collections.synchronizedMap(new HashMap ()); 72 73 76 private static final CallerListener[] EMPTY = new CallerListener[0]; 77 78 79 86 public void addCallerListener(String uri, CallerListener listener) 87 throws InvalidURIException{ 88 URI parsed = URIHelper.parse(uri); 89 parsed = URIHelper.convertHostToAddress(parsed); 90 List list = null; 91 synchronized (_listeners) { 92 list = (List ) _listeners.get(parsed); 93 if (list == null) { 94 list = Collections.synchronizedList(new ArrayList ()); 95 _listeners.put(parsed, list); 96 } 97 } 98 list.add(listener); 99 } 100 101 108 public void removeCallerListener(String uri, CallerListener listener) 109 throws InvalidURIException { 110 URI parsed = URIHelper.parse(uri); 111 parsed = URIHelper.convertHostToAddress(parsed); 112 List list = null; 113 synchronized (_listeners) { 114 list = (List ) _listeners.get(parsed); 115 if (list != null) { 116 list.remove(listener); 117 } 118 } 119 } 120 121 126 public void disconnected(Caller caller) { 127 CallerListener[] listeners = getListeners(caller.getRemoteURI()); 128 for (int i = 0; i < listeners.length; ++i) { 129 listeners[i].disconnected(caller); 130 } 131 } 132 133 139 private CallerListener[] getListeners(URI uri) { 140 CallerListener[] result = EMPTY; 141 List list = null; 142 synchronized (_listeners) { 143 list = (List ) _listeners.get(uri); 144 if (list == null) { 145 list = (List ) _listeners.get(uri); 146 } 147 } 148 if (list != null) { 149 result = (CallerListener[]) list.toArray(EMPTY); 150 } 151 return result; 152 } 153 } 154 | Popular Tags |