package com.limegroup.gnutella.io; /** * Denotes the class can handle delegating ReadObserver events to * other ReadObservers. */ public interface NIOMultiplexor { /** * Sets the new ReadObserver. A ChannelReadObserver is required * so that the multiplexor can set the appropriate source channel * for reading. The source channel is set on the deepest ChannelReader * in the chain. For example, given the chain: * ChannelReadObserver a = new ProtocolReader(); * ChannelReader b = new DeObfuscator(); * ChannelReader c = new DataInflater(); * a.setReadChannel(b); * b.setReadChannel(c); * setReadObserver(a); * the deepest ChannelReader is 'c', so the muliplexor would call * c.setReadChannel(ultimateSource); * * The deepest ChannelReader is found with code equivilant to: * ChannelReader deepest = initial; * while(deepest.getReadChannel() instanceof ChannelReader) * deepest = (ChannelReader)deepest.getReadChannel(); */ public void setReadObserver(ChannelReadObserver reader); /** * Sets the new ChannelWriter. A ChannelWriter is necessary (instead of * a WriteObserver) because the actual WriteObserver that listens for write * events from the ultimate source will be installed at the deepest * InterestWriteChannel in the chain. For example, given the chain: * ChannelWriter a = new ProtocolWriter(); * ChannelWriter b = new Obfuscator(); * ChannelWriter c = new DataDeflater(); * a.setWriteChannel(b); * b.setWriteChannel(c); * setWriteObserver(a); * the deepest ChannelWriter is 'c', so the multiplexor would call * c.setWriteChannel(ultimateSource); * * The deepest ChannelWriter is found with code equivilant to: * ChannelWriter deepest = initial; * while(deepest.getWriteChannel() instanceof ChannelWriter) * deepest = (ChannelWriter)deepest.getWriteChannel(); * * When write events are generated, ultimateSource.handleWrite will * forward the event to the last channel that was interested in it ('c'), * which will cause 'c' to either write data immediately or forward the event * to 'b', etc. */ public void setWriteObserver(ChannelWriter writer); }