package org.playorm.nio.impl.cm.readreg;
import java.io.IOException;
import java.net.SocketAddress;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.playorm.nio.api.channels.Channel;
import org.playorm.nio.api.channels.NioException;
import org.playorm.nio.api.handlers.DataListener;
import org.playorm.nio.impl.util.UtilChannel;
public class RegHelperChannel extends UtilChannel implements Channel {
private static final Logger apiLog = Logger.getLogger(Channel.class.getName());
protected DataListener cachedListener;
protected boolean isRegistered = false;
public RegHelperChannel(Channel realChannel) {
super(realChannel);
}
@Override
public synchronized void registerForReads(DataListener listener) {
if(apiLog.isLoggable(Level.FINE))
apiLog.fine(this+"RegRead.registerForReads called");
cachedListener = listener;
if(!isConnected()) {
return;
}
getRealChannel().registerForReads(listener);
isRegistered = true;
}
@Override
public synchronized void unregisterForReads() {
if(apiLog.isLoggable(Level.FINE))
apiLog.fine(this+"RegRead.unregisterForReads called");
cachedListener = null;
if(!isConnected()) {
return;
}
getRealChannel().unregisterForReads();
isRegistered = false;
}
@Override
public void oldConnect(SocketAddress addr) {
try {
oldConnectImpl(addr);
} catch (IOException e) {
throw new NioException(e);
}
}
private synchronized void oldConnectImpl(SocketAddress addr) throws IOException {
if(apiLog.isLoggable(Level.FINE))
apiLog.fine(this+"RegRead.connect called-addr="+addr);
super.oldConnect(addr);
if(cachedListener != null) {
getRealChannel().registerForReads(cachedListener);
isRegistered = true;
}
}
}