package com.sissi.pipeline.in.auth.impl;
import java.util.Map;
import java.util.WeakHashMap;
import javax.security.sasl.SaslServer;
import com.sissi.context.JIDContext;
import com.sissi.pipeline.in.auth.SaslServers;
import com.sissi.resource.ResourceCounter;
/**
* @author kim 2013年11月27日
*/
public class CachedSaslServers implements SaslServers {
/**
* WeakHashMap
*/
private final Map<JIDContext, SaslServer> cached = new WeakHashMap<JIDContext, SaslServer>();
private final String resource = this.getClass().getSimpleName();
private final ResourceCounter resourceCounter;
public CachedSaslServers(ResourceCounter resourceCounter) {
super();
this.resourceCounter = resourceCounter;
}
@Override
public SaslServer push(JIDContext context, SaslServer sasl) {
this.cached.put(context, sasl);
this.resourceCounter.increment(this.resource);
return sasl;
}
@Override
public SaslServer pull(JIDContext context) {
SaslServer saslServer = this.cached.remove(context);
this.resourceCounter.decrement(this.resource);
return saslServer;
}
}