package com.limegroup.gnutella.io; import java.io.IOException; import java.net.Socket; import java.nio.channels.SocketChannel; public class StubReadConnectObserver implements ReadObserver, ConnectObserver, ReadTimeout { private StubConnectObserver connectDelegate = new StubConnectObserver(); private StubReadObserver readDelegate = new StubReadObserver(); private IOException ioException; private boolean shutdown; private SocketChannel channel; private long ioxTime; private long lastReadTime; public IOException getIoException() { return ioException; } public boolean isShutdown() { return shutdown; } public synchronized void shutdown() { this.shutdown = true; notify(); } public SocketChannel getChannel() throws IOException { if(channel == null) { channel = SocketChannel.open(); channel.configureBlocking(false); readDelegate.setChannel(channel); } return channel; } public synchronized void handleIOException(IOException iox) { this.ioxTime = System.currentTimeMillis(); this.ioException = iox; notify(); } public Socket getSocket() { return connectDelegate.getSocket(); } public synchronized void handleConnect(Socket socket) throws IOException { connectDelegate.handleConnect(socket); notify(); } public int getReadsHandled() { return readDelegate.getReadsHandled(); } public long getReadTimeout() { return readDelegate.getReadTimeout(); } public synchronized void handleRead() throws IOException { this.lastReadTime = System.currentTimeMillis(); readDelegate.handleRead(); notify(); } public void setReadTimeout(long readTimeout) { readDelegate.setReadTimeout(readTimeout); } public synchronized void waitForEvent(long timeout) throws InterruptedException { wait(timeout); } public long getIoxTime() { return ioxTime; } public void setIoxTime(long ioxTime) { this.ioxTime = ioxTime; } public long getLastReadTime() { return lastReadTime; } public void setLastReadTime(long lastReadTime) { this.lastReadTime = lastReadTime; } }