@Override public void onClose(Channel channel) { NioChannel nioChannel = (NioChannel) channel; channels.remove(channel); ioBalancer.channelRemoved(nioChannel.inboundPipeline(), nioChannel.outboundPipeline()); metricsRegistry.deregister(nioChannel.inboundPipeline()); metricsRegistry.deregister(nioChannel.outboundPipeline()); } }
@Override public String toString() { return "NioChannel{" + localSocketAddress() + "->" + remoteSocketAddress() + '}'; }
NioPipeline(NioChannel channel, NioThread owner, ChannelErrorHandler errorHandler, int initialOps, ILogger logger, IOBalancer ioBalancer) { this.channel = channel; this.socketChannel = channel.socketChannel(); this.owner = owner; this.ownerId = owner.id; this.logger = logger; this.initialOps = initialOps; this.ioBalancer = ioBalancer; this.errorHandler = errorHandler; }
@Override public Channel register(SocketChannel socketChannel, boolean clientMode) throws IOException { NioChannel channel = new NioChannel( socketChannel, clientMode, channelInitializer, metricsRegistry, closeListenerExecutor); socketChannel.configureBlocking(false); NioInboundPipeline inboundPipeline = newInboundPipeline(channel); NioOutboundPipeline outboundPipeline = newOutboundPipeline(channel); channels.add(channel); channel.init(inboundPipeline, outboundPipeline); ioBalancer.channelAdded(inboundPipeline, outboundPipeline); channel.addCloseListener(channelCloseListener); return channel; }
@Override public boolean write(OutboundFrame frame) { if (isClosed()) { return false; } outboundPipeline.write(frame); return true; }
private Queue<OutboundFrame> getOutboundQueue(TcpIpConnection connection, boolean priority) { if (connection.getChannel() instanceof NioChannel) { NioChannel nioChannel = (NioChannel) connection.getChannel(); NioOutboundPipeline outboundPipeline = nioChannel.outboundPipeline(); return priority ? outboundPipeline.priorityWriteQueue : outboundPipeline.writeQueue; } else { return EMPTY_QUEUE; } }
@Override protected void close0() { outboundPipeline.drainWriteQueues(); // the socket is immediately closed. try { socketChannel.close(); } catch (IOException e) { if (logger.isFineEnabled()) { logger.fine("Failed to close " + this, e); } } if (Thread.currentThread() instanceof NioThread) { // we don't want to do any tasks on an io thread; we offload it instead try { closeListenerExecutor.execute(new NotifyCloseListenersTask()); } catch (RejectedExecutionException e) { // if the task gets rejected, the networking must be shutting down. logger.fine(e); } } else { notifyCloseListeners(); } }
@Override public Channel register(SocketChannel socketChannel, boolean clientMode) throws IOException { NioChannel channel = new NioChannel( socketChannel, clientMode, channelInitializer, metricsRegistry, closeListenerExecutor); socketChannel.configureBlocking(false); NioInboundPipeline inboundPipeline = newInboundPipeline(channel); NioOutboundPipeline outboundPipeline = newOutboundPipeline(channel); channels.add(channel); channel.init(inboundPipeline, outboundPipeline); ioBalancer.channelAdded(inboundPipeline, outboundPipeline); channel.addCloseListener(channelCloseListener); return channel; }
@Override public boolean write(OutboundFrame frame) { if (isClosed()) { return false; } outboundPipeline.write(frame); return true; }
private Queue<OutboundFrame> getOutboundQueue(TcpIpConnection connection, boolean priority) { if (connection.getChannel() instanceof NioChannel) { NioChannel nioChannel = (NioChannel) connection.getChannel(); NioOutboundPipeline outboundPipeline = nioChannel.outboundPipeline(); return priority ? outboundPipeline.priorityWriteQueue : outboundPipeline.writeQueue; } else { return EMPTY_QUEUE; } }
@Override protected void close0() { outboundPipeline.drainWriteQueues(); // the socket is immediately closed. try { socketChannel.close(); } catch (IOException e) { if (logger.isFineEnabled()) { logger.fine("Failed to close " + this, e); } } if (Thread.currentThread() instanceof NioThread) { // we don't want to do any tasks on an io thread; we offload it instead try { closeListenerExecutor.execute(new NotifyCloseListenersTask()); } catch (RejectedExecutionException e) { // if the task gets rejected, the networking must be shutting down. logger.fine(e); } } else { notifyCloseListeners(); } }
@Override public String toString() { return "NioChannel{" + localSocketAddress() + "->" + remoteSocketAddress() + '}'; }
@Override public void onClose(Channel channel) { NioChannel nioChannel = (NioChannel) channel; channels.remove(channel); ioBalancer.channelRemoved(nioChannel.inboundPipeline(), nioChannel.outboundPipeline()); metricsRegistry.deregister(nioChannel.inboundPipeline()); metricsRegistry.deregister(nioChannel.outboundPipeline()); } }
NioPipeline(NioChannel channel, NioThread owner, ChannelErrorHandler errorHandler, int initialOps, ILogger logger, IOBalancer ioBalancer) { this.channel = channel; this.socketChannel = channel.socketChannel(); this.owner = owner; this.ownerId = owner.id; this.logger = logger; this.initialOps = initialOps; this.ioBalancer = ioBalancer; this.errorHandler = errorHandler; }
@Override protected void onConnect() { String metricsId = localSocketAddress() + "->" + remoteSocketAddress(); metricsRegistry.scanAndRegister(outboundPipeline, "tcp.connection[" + metricsId + "].out"); metricsRegistry.scanAndRegister(inboundPipeline, "tcp.connection[" + metricsId + "].in"); }
@Override protected void onConnect() { String metricsId = localSocketAddress() + "->" + remoteSocketAddress(); metricsRegistry.scanAndRegister(outboundPipeline, "tcp.connection[" + metricsId + "].out"); metricsRegistry.scanAndRegister(inboundPipeline, "tcp.connection[" + metricsId + "].in"); }