@Override public void deregisterChannelAsync( final SelectorRunner selectorRunner, final SelectableChannel channel, final CompletionHandler<RegisterChannelResult> completionHandler) { if (isSelectorRunnerThread(selectorRunner)) { deregisterChannel0(selectorRunner, channel, completionHandler); } else { addPendingTask(selectorRunner, new DeregisterChannelOperation( channel, completionHandler)); } }
private boolean processPendingTasks(final SelectorRunner selectorRunner) throws IOException { return processPendingTaskQueue(selectorRunner, selectorRunner.obtainPostponedTasks()) && (!selectorRunner.hasPendingTasks || processPendingTaskQueue(selectorRunner, selectorRunner.getPendingTasks())); }
@Override public boolean preSelect(final SelectorRunner selectorRunner) throws IOException { return processPendingTasks(selectorRunner); }
@Override public void registerChannelAsync( SelectorRunner selectorRunner, SelectableChannel channel, int interest, Object attachment, CompletionHandler<RegisterChannelResult> completionHandler) { if (isSelectorRunnerThread(selectorRunner)) { registerChannel0(selectorRunner, channel, interest, attachment, completionHandler); } else { addPendingTask(selectorRunner, new RegisterChannelOperation( channel, interest, attachment, completionHandler)); } }
@Override public void registerKeyInterest(final SelectorRunner selectorRunner, final SelectionKey key, final int interest) throws IOException { if (isSelectorRunnerThread(selectorRunner)) { registerKey0(key, interest); } else { selectorRunner.addPendingTask(new RegisterKeyTask(key, interest)); } }
@Override public void registerChannel(final SelectorRunner selectorRunner, final SelectableChannel channel, final int interest, final Object attachment) throws IOException { final FutureImpl<RegisterChannelResult> future = SafeFutureImpl.create(); registerChannelAsync(selectorRunner, channel, interest, attachment, Futures.toCompletionHandler(future)); try { future.get(selectTimeout, TimeUnit.MILLISECONDS); } catch (Exception e) { throw new IOException(e.getMessage()); } }
@Override public void deregisterChannel(final SelectorRunner selectorRunner, final SelectableChannel channel) throws IOException { final FutureImpl<RegisterChannelResult> future = SafeFutureImpl.create(); deregisterChannelAsync(selectorRunner, channel, Futures.toCompletionHandler(future)); try { future.get(selectTimeout, TimeUnit.MILLISECONDS); } catch (Exception e) { throw new IOException(e.getMessage()); } }
failChannelRegistration(completionHandler, new ClosedChannelException()); failChannelRegistration(completionHandler, e);
selectorHandler = new DefaultSelectorHandler();
@Override public void registerChannelAsync( SelectorRunner selectorRunner, SelectableChannel channel, int interest, Object attachment, CompletionHandler<RegisterChannelResult> completionHandler) { if (isSelectorRunnerThread(selectorRunner)) { registerChannel0(selectorRunner, channel, interest, attachment, completionHandler); } else { addPendingTask(selectorRunner, new RegisterChannelOperation( channel, interest, attachment, completionHandler)); } }
@Override public void registerKeyInterest(final SelectorRunner selectorRunner, final SelectionKey key, final int interest) throws IOException { if (isSelectorRunnerThread(selectorRunner)) { registerKey0(key, interest); } else { selectorRunner.addPendingTask(new RegisterKeyTask(key, interest)); } }
@Override public void registerChannel(final SelectorRunner selectorRunner, final SelectableChannel channel, final int interest, final Object attachment) throws IOException { final FutureImpl<RegisterChannelResult> future = SafeFutureImpl.create(); registerChannelAsync(selectorRunner, channel, interest, attachment, Futures.toCompletionHandler(future)); try { future.get(selectTimeout, TimeUnit.MILLISECONDS); } catch (Exception e) { throw new IOException(e.getMessage()); } }
@Override public void deregisterChannel(final SelectorRunner selectorRunner, final SelectableChannel channel) throws IOException { final FutureImpl<RegisterChannelResult> future = SafeFutureImpl.create(); deregisterChannelAsync(selectorRunner, channel, Futures.toCompletionHandler(future)); try { future.get(selectTimeout, TimeUnit.MILLISECONDS); } catch (Exception e) { throw new IOException(e.getMessage()); } }
failChannelRegistration(completionHandler, new ClosedChannelException()); failChannelRegistration(completionHandler, e);
selectorHandler = new DefaultSelectorHandler();
@Override public void deregisterChannelAsync( final SelectorRunner selectorRunner, final SelectableChannel channel, final CompletionHandler<RegisterChannelResult> completionHandler) { if (isSelectorRunnerThread(selectorRunner)) { deregisterChannel0(selectorRunner, channel, completionHandler); } else { addPendingTask(selectorRunner, new DeregisterChannelOperation( channel, completionHandler)); } }
@Override public void registerChannelAsync( SelectorRunner selectorRunner, SelectableChannel channel, int interest, Object attachment, CompletionHandler<RegisterChannelResult> completionHandler) { if (isSelectorRunnerThread(selectorRunner)) { registerChannel0(selectorRunner, channel, interest, attachment, completionHandler); } else { addPendingTask(selectorRunner, new RegisterChannelOperation( channel, interest, attachment, completionHandler)); } }
@Override public void registerKeyInterest(final SelectorRunner selectorRunner, final SelectionKey key, final int interest) throws IOException { if (isSelectorRunnerThread(selectorRunner)) { registerKey0(key, interest); } else { selectorRunner.addPendingTask(new RegisterKeyTask(key, interest)); } }
private boolean processPendingTasks(final SelectorRunner selectorRunner) throws IOException { return processPendingTaskQueue(selectorRunner, selectorRunner.obtainPostponedTasks()) && (!selectorRunner.hasPendingTasks || processPendingTaskQueue(selectorRunner, selectorRunner.getPendingTasks())); }
@Override public boolean preSelect(final SelectorRunner selectorRunner) throws IOException { return processPendingTasks(selectorRunner); }