package com.limegroup.gnutella;
import java.net.InetSocketAddress;
import org.limewire.collection.FixedsizeForgetfulHashMap;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class UDPReplyHandlerCacheImpl implements UDPReplyHandlerCache {
private final UDPReplyHandlerFactory udpReplyHandlerFactory;
/** A mapping of UDPReplyHandlers, to prevent creation of them over-and-over. */
private final FixedsizeForgetfulHashMap<InetSocketAddress, UDPReplyHandler> udpReplyHandlerCache =
new FixedsizeForgetfulHashMap<InetSocketAddress, UDPReplyHandler>(500);
@Inject
public UDPReplyHandlerCacheImpl(UDPReplyHandlerFactory udpReplyHandlerFactory) {
this.udpReplyHandlerFactory = udpReplyHandlerFactory;
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.UDPReplyHnadlerCache#getUDPReplyHandler(java.net.InetSocketAddress)
*/
public synchronized UDPReplyHandler getUDPReplyHandler(InetSocketAddress addr) {
UDPReplyHandler handler = udpReplyHandlerCache.get(addr);
if (handler == null) {
handler = udpReplyHandlerFactory.createUDPReplyHandler(addr);
udpReplyHandlerCache.put(addr, handler);
}
return handler;
}
/* (non-Javadoc)
* @see com.limegroup.gnutella.UDPReplyHnadlerCache#clear()
*/
public synchronized void clear() {
udpReplyHandlerCache.clear();
}
}