package org.limewire.rudp; import java.io.IOException; import java.nio.channels.DatagramChannel; import java.nio.channels.Pipe; import java.nio.channels.ServerSocketChannel; import java.nio.channels.spi.SelectorProvider; import org.limewire.listener.AsynchronousEventBroadcaster; import org.limewire.rudp.messages.SynMessage.Role; import com.google.inject.Inject; import com.google.inject.Singleton; /** * Service-provider class for {@link UDPMultiplexor} selectors and * {@link UDPSocketChannel} selectable channels. */ @Singleton public class UDPSelectorProvider extends SelectorProvider { private final RUDPContext context; private final AsynchronousEventBroadcaster<UDPSocketChannelConnectionEvent> connectionStateEventBroadcaster; @Inject public UDPSelectorProvider(RUDPContext context, AsynchronousEventBroadcaster<UDPSocketChannelConnectionEvent> connectionStateEventBroadcaster) { this.context = context; this.connectionStateEventBroadcaster = connectionStateEventBroadcaster; } @Override public DatagramChannel openDatagramChannel() throws IOException { throw new IOException("not supported"); } @Override public Pipe openPipe() throws IOException { throw new IOException("not supported"); } @Override public UDPMultiplexor openSelector() { UDPMultiplexor plexor = new UDPMultiplexor(this, context); return plexor; } /** * Opens an acceptor socket channel after a request has been received * that another party is trying to connect to this instance. */ public AbstractNBSocketChannel openAcceptorSocketChannel() { return new UDPSocketChannel(this, context, Role.ACCEPTOR, connectionStateEventBroadcaster); } @Override public AbstractNBSocketChannel openSocketChannel() { return new UDPSocketChannel(this, context, Role.REQUESTOR, connectionStateEventBroadcaster); } public Class<UDPSocketChannel> getUDPSocketChannelClass() { return UDPSocketChannel.class; } public RUDPContext getContext() { return context; } @Override public ServerSocketChannel openServerSocketChannel() throws IOException { throw new UnsupportedOperationException("not implemented"); } }