@Override public Object sendMessage(Object message) { return channel.write(message, remoteAddress); }
@Override public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { DatagramChannel datagramChannel = (DatagramChannel) e.getChannel(); Session session = NettyUDPClient.CLIENTS.get(datagramChannel .getLocalAddress()); if ((null != session) && !session.isShuttingDown()) { Event event = Events.event(e, Events.DISCONNECT); session.onEvent(event); } else if (null != session) { System.out.println("Session is already shutting down. " + "Disconnect event will be discarded for channel {}" + datagramChannel.getId()); } }
"DatagramChannel passed to connect method cannot be null"); if (!datagramChannel.isBound()) ChannelFuture future = datagramChannel.write(event, serverAddress); future.addListener(new ChannelFutureListener() CLIENTS.put(datagramChannel.getLocalAddress(), session); return future;
@Override public void shutdown() { //In FeedClientDDF, subscriptions are cleared on logout, do we want to do this here? messageTask.interrupt(); messageQueue.clear(); if (channel != null) { channel.close(); channel = null; } }
@Override public synchronized void close() { if (isClosed) return; Session session = NettyUDPClient.CLIENTS.remove(channel .getLocalAddress()); if (null == session) { System.err.println("Possible memory leak occurred. " + "The session associated with udp localaddress: " + channel.getLocalAddress() + " could not be removed from NettyUDPClient.CLIENTS map"); } isClosed = true; }
@Override public String toString() { String channelId = "UDP Channel with id: "; if (null != channel) { channelId += channel.getId(); } else { channelId += "0"; } String sender = "Netty " + channelId + " RemoteAddress: " + remoteAddress; return sender; }
@Override public void start(boolean master) { this.channel = (DatagramChannel) bootstrap.bind(); LOG.info("Channel {} listening on port {}", channel, port); if (!isSendToServerInsteadOfMulticast()) { final int multicastPort = multicastGroup.getPort(); this.multicastChannel = (DatagramChannel) bootstrap.bind(new InetSocketAddress(multicastPort)); if (multicastNetworkInterface != null) { LOG.info("Channel {} joining multicast group {} on network interface {}", new Object[]{multicastChannel, multicastGroup, multicastNetworkInterface}); multicastChannel.joinGroup(multicastGroup, multicastNetworkInterface); } else { LOG.info("Channel {} joining multicast group {} ", multicastChannel, multicastGroup); multicastChannel.joinGroup(multicastGroup.getAddress()); } } else this.multicastChannel = null; setReady(true); }
private RequestDispatcher getRequestDispatcher() { return getChannel().getPipeline().get(RequestDispatcher.class); }
@Override public void operationComplete(ChannelFuture future) throws Exception { LOG.warn("Channel closed ({}).", CoapClient.this.getApplicationName()); getChannel().getFactory().releaseExternalResources(); LOG.warn("External resources released ({}).", CoapClient.this.getApplicationName()); LOG.warn("Shutdown of " + getApplicationName() + " completed."); } });
@Override public void shutdown() { //In FeedClientDDF, subscriptions are cleared on logout, do we want to do this here? messageTask.interrupt(); messageQueue.clear(); if (channel != null) { channel.close(); channel = null; } }
@Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { // Lookup the session from the local address. DatagramChannel datagramChannel = (DatagramChannel) e.getChannel(); Session session = NettyUDPClient.CLIENTS.get(datagramChannel .getLocalAddress()); if (null != session) { Event event = (Event) e.getMessage(); // Pass the event on to the session session.onEvent(event); } }
@Override public String toString() { String channelId = "UDP Channel with id: "; if (null != channel) { channelId += channel.getId(); } else { channelId += "0"; } String sender = "Netty " + channelId + " RemoteAddress: " + remoteAddress; return sender; } }
ObjectHelper.notNull(multicastNetworkInterface, "No network interface found for '" + networkInterface + "'."); LOG.info("ConnectionlessBootstrap joining {}:{} using network interface: {}", configuration.getHost(), configuration.getPort(), multicastNetworkInterface.getName()); datagramChannel.joinGroup(hostAddress, multicastNetworkInterface).syncUninterruptibly(); allChannels.add(datagramChannel); } else {
private RequestDispatcher getRequestDispatcher() { return getChannel().getPipeline().get(RequestDispatcher.class); }
@Override public Object sendMessage(Object message) { return channel.write(message, remoteAddress); }
@Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { System.err.println(e.getCause()); DatagramChannel datagramChannel = (DatagramChannel) e.getChannel(); Session session = NettyUDPClient.CLIENTS.get(datagramChannel .getLocalAddress()); if (null != session) { Event event = Events.event(e, Events.EXCEPTION); session.onEvent(event); } }
/** * Creates a new instance of {@link CoapClient}. * * @param name the name of the application (used for logging purposes) * @param clientSocket the socket to send {@link CoapMessage}s */ public CoapClient(String name, InetSocketAddress clientSocket) { super(name); ClientChannelPipelineFactory factory = new ClientChannelPipelineFactory(this.getExecutor()); startApplication(factory, clientSocket); this.responseDispatcher = getChannel().getPipeline().get(ResponseDispatcher.class); }
/** * Utility method used to send a message to the server. Users can also use * datagramChannel.write(message, serverAddress) directly. * * @param datagramChannel * The channel on which the message is to be sent to remote * server. * @param message * The message to be sent. <b>NOTE</b> The message should be a * valid and encode-able by the encoders in the ChannelPipeline * of this server. * @return Returns a ChannelFuture which can be used to check the success of * this operation. <b>NOTE</b> Success in case of UDP means message * is sent to server. It does not mean that the server has received * it. */ public static ChannelFuture write(DatagramChannel datagramChannel, Object message, InetSocketAddress serverAddress) { return datagramChannel.write(message, serverAddress); }
@Override protected void doShutdown(long timeout, TimeUnit unit) throws InterruptedException { datagramChannel.close().await(timeout, unit); bootstrap.releaseExternalResources(); }