@Override public Promise<Boolean> shutdown() { final Deferred<Boolean, Promise<Boolean>> d = Promises.defer(getEnvironment(), getReactor().getDispatcher()); getReactor().schedule( new Consumer<Void>() { @SuppressWarnings("unchecked") @Override public void accept(Void v) { GenericFutureListener listener = new GenericFutureListener() { @Override public void operationComplete(Future future) throws Exception { if (future.isSuccess()) { d.accept(true); } else { d.accept(future.cause()); } } }; if (null == nettyOptions || null == nettyOptions.eventLoopGroup()) { ioGroup.shutdownGracefully().addListener(listener); } } }, null ); notifyShutdown(); return d.compose(); }
@Override protected <C> NetChannel<IN, OUT> createChannel(C ioChannel) { return new NettyNetChannel<IN, OUT>( getEnvironment(), getCodec(), new SynchronousDispatcher(), getReactor(), (NioDatagramChannel) ioChannel ); }
@Override public Promise<Void> leave(InetAddress multicastAddress, NetworkInterface iface) { if (null == channel) { throw new IllegalStateException("DatagramServer not running."); } if (null == iface && null != getMulticastInterface()) { iface = getMulticastInterface(); } final Deferred<Void, Promise<Void>> d = Promises.defer(getEnvironment(), getReactor().getDispatcher()); final ChannelFuture future; if (null != iface) { future = channel.leaveGroup(new InetSocketAddress(multicastAddress, getListenAddress().getPort()), iface); } else { future = channel.leaveGroup(multicastAddress); } future.addListener(new PromiseCompletingListener(d)); return d.compose(); }
@Override public Promise<Void> join(InetAddress multicastAddress, NetworkInterface iface) { if (null == channel) { throw new IllegalStateException("DatagramServer not running."); } final Deferred<Void, Promise<Void>> d = Promises.defer(getEnvironment(), getReactor().getDispatcher()); if (null == iface && null != getMulticastInterface()) { iface = getMulticastInterface(); } final ChannelFuture future; if (null != iface) { future = channel.joinGroup(new InetSocketAddress(multicastAddress, getListenAddress().getPort()), iface); } else { future = channel.joinGroup(multicastAddress); } future.addListener(new PromiseCompletingListener(d)); return d.compose(); }