private void connected(HandlerHolder<Handlers> handler, Channel ch) { NetServerImpl.this.initChannel(ch.pipeline()); VertxHandler<NetSocketImpl> nh = VertxHandler.<NetSocketImpl>create(handler.context, ctx -> new NetSocketImpl(vertx, ctx, handler.context, sslHelper, metrics)); nh.addHandler(conn -> socketMap.put(ch, conn)); nh.removeHandler(conn -> socketMap.remove(ch)); ch.pipeline().addLast("handler", nh); NetSocketImpl sock = nh.getConnection(); handler.context.executeFromIO(v -> { if (metrics != null) { sock.metric(metrics.connected(sock.remoteAddress(), sock.remoteName())); } sock.registerEventBusHandler(); handler.handler.connectionHandler.handle(sock); }); }
@Override protected synchronized void handleInterestedOpsChanged() { checkContext(); callDrainHandler(); }
@Override public synchronized NetSocket handler(Handler<Buffer> dataHandler) { if (dataHandler != null) { messageHandler(new DataMessageHandler(channelHandlerContext().alloc(), dataHandler)); } else { messageHandler(null); } return this; }
public synchronized void handleMessage(Object msg) { checkContext(); if (!pending.write(msg)) { doPause(); } }
public NetSocketImpl(VertxInternal vertx, ChannelHandlerContext channel, SocketAddress remoteAddress, ContextInternal context, SSLHelper helper, TCPMetrics metrics) { super(vertx, channel, context); this.helper = helper; this.writeHandlerID = "__vertx.net." + UUID.randomUUID().toString(); this.remoteAddress = remoteAddress; this.metrics = metrics; pending = new InboundBuffer<>(context); pending.drainHandler(v -> doResume()); pending.handler(NULL_MSG_HANDLER); pending.emptyHandler(v -> checkEnd()); }
@Override public void end() { close(); }
@Override protected void handleClosed() { listener.onEvict(); super.handleClosed(); } };
@Override public NetSocket setWriteQueueMaxSize(int maxSize) { doSetWriteQueueMaxSize(maxSize); return this; }
@Override public synchronized NetSocket drainHandler(Handler<Void> drainHandler) { this.drainHandler = drainHandler; vertx.runOnContext(v -> callDrainHandler()); //If the channel is already drained, we want to call it immediately return this; }
@Override protected void handleClosed() { MessageConsumer consumer; synchronized (this) { if (closed) { return; } closed = true; consumer = registration; registration = null; } checkEnd(); super.handleClosed(); if (consumer != null) { consumer.unregister(); } }
public NetSocketImpl(VertxInternal vertx, ChannelHandlerContext channel, SocketAddress remoteAddress, ContextInternal context, SSLHelper helper, TCPMetrics metrics) { super(vertx, channel, context); this.helper = helper; this.writeHandlerID = "__vertx.net." + UUID.randomUUID().toString(); this.remoteAddress = remoteAddress; this.metrics = metrics; pending = new InboundBuffer<>(context); pending.drainHandler(v -> doResume()); pending.handler(NULL_MSG_HANDLER); pending.emptyHandler(v -> checkEnd()); }
public synchronized void handleMessage(Object msg) { checkContext(); if (!pending.write(msg)) { doPause(); } }
public void close() { if (!closed) { for (NetSocketImpl sock : socketMap.values()) { sock.close(); } if (creatingContext != null) { creatingContext.removeCloseHook(closeHook); } closed = true; if (metrics != null) { metrics.close(); } } }
@Override protected void handleClosed() { if (metrics != null) { metrics.responseEnd(responseInProgress.metric(), responseInProgress.response()); } connectionMap.remove(chctx.channel()); super.handleClosed(); }
@Override public NetSocket setWriteQueueMaxSize(int maxSize) { doSetWriteQueueMaxSize(maxSize); return this; }
@Override public synchronized NetSocket drainHandler(Handler<Void> drainHandler) { this.drainHandler = drainHandler; vertx.runOnContext(v -> callDrainHandler()); //If the channel is already drained, we want to call it immediately return this; }
@Override protected void handleClosed() { MessageConsumer consumer; synchronized (this) { if (closed) { return; } closed = true; consumer = registration; registration = null; } checkEnd(); super.handleClosed(); if (consumer != null) { consumer.unregister(); } }
private void connected(ContextInternal context, Channel ch, Handler<AsyncResult<NetSocket>> connectHandler, SocketAddress remoteAddress) { initChannel(ch.pipeline()); VertxHandler<NetSocketImpl> handler = VertxHandler.create(context, ctx -> new NetSocketImpl(vertx, ctx, remoteAddress, context, sslHelper, metrics)); handler.addHandler(sock -> { socketMap.put(ch, sock); context.executeFromIO(v -> { if (metrics != null) { sock.metric(metrics.connected(sock.remoteAddress(), sock.remoteName())); } sock.registerEventBusHandler(); connectHandler.handle(Future.succeededFuture(sock)); }); }); handler.removeHandler(conn -> { socketMap.remove(ch); }); ch.pipeline().addLast("handler", handler); }
@Override protected synchronized void handleInterestedOpsChanged() { checkContext(); callDrainHandler(); }
@Override public synchronized NetSocket handler(Handler<Buffer> dataHandler) { if (dataHandler != null) { messageHandler(new DataMessageHandler(channelHandlerContext().alloc(), dataHandler)); } else { messageHandler(null); } return this; }