package org.playorm.nio.impl.cm.packet; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.util.logging.Logger; import org.playorm.nio.api.channels.TCPChannel; import org.playorm.nio.api.deprecated.ConnectionCallback; import org.playorm.nio.api.handlers.DataListener; import org.playorm.nio.api.handlers.FutureOperation; import org.playorm.nio.api.handlers.OperationCallback; import org.playorm.nio.api.libs.PacketProcessor; import org.playorm.nio.impl.util.UtilPassThroughWriteHandler; import org.playorm.nio.impl.util.UtilTCPChannel; class PacTCPChannel extends UtilTCPChannel implements TCPChannel { private static final Logger log = Logger.getLogger(PacTCPChannel.class.getName()); // private BufferHelper helper = ChannelManagerFactory.bufferHelper(null); private PacketProcessor packetProcessor; public PacTCPChannel(TCPChannel channel, PacketProcessor proc) { super(channel); this.packetProcessor = proc; } public void registerForReads(DataListener listener) { PacProxyDataHandler handler = new PacProxyDataHandler(this, packetProcessor, listener); packetProcessor.setPacketListener(handler); TCPChannel realChannel = getRealChannel(); realChannel.registerForReads(handler); } public FutureOperation write(ByteBuffer b) { ByteBuffer out = packetProcessor.processOutgoing(b); TCPChannel realChannel = getRealChannel(); return realChannel.write(out); } @Override public int oldWrite(ByteBuffer b) { int retVal = b.remaining(); ByteBuffer out = packetProcessor.processOutgoing(b); TCPChannel realChannel = getRealChannel(); realChannel.oldWrite(out); return retVal; } @Override public void oldWrite(ByteBuffer b, OperationCallback h) { ByteBuffer out = packetProcessor.processOutgoing(b); TCPChannel realChannel = getRealChannel(); realChannel.oldWrite(out, new UtilPassThroughWriteHandler(this, h)); } public void oldConnect(SocketAddress addr, ConnectionCallback c) { if(c == null) throw new IllegalArgumentException("ConnectCallback cannot be null"); PacProxyConnectCb proxy = new PacProxyConnectCb(this, c); TCPChannel realChannel = getRealChannel(); realChannel.oldConnect(addr, proxy); } }