@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 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 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); } }
@Override public void channelClosed(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); } }
@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()); } }
CLIENTS.put(datagramChannel.getLocalAddress(), session); return future;
final DatagramChannel datagramChannel = udpClient .createDatagramChannel(); localAddress = datagramChannel.getLocalAddress();
/** * Returns the local port number the {@link org.jboss.netty.channel.socket.DatagramChannel} of this * {@link de.uzl.itm.ncoap.application.client.CoapClient} is bound to or * {@link #NOT_BOUND} if the application has not yet been started. * * @return the local port number the {@link org.jboss.netty.channel.socket.DatagramChannel} of this * {@link de.uzl.itm.ncoap.application.client.CoapClient} is bound to or * {@link #NOT_BOUND} if the application has not yet been started. */ public int getPort() { try { return this.channel.getLocalAddress().getPort(); } catch(Exception ex) { return NOT_BOUND; } }