@Override public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { Channel channel = ctx.getChannel(); String channelKey = getChannelKey((InetSocketAddress) channel.getLocalAddress(), (InetSocketAddress) channel.getRemoteAddress()); channels.remove(channelKey); ctx.sendUpstream(e); }
public void afterAdd(ChannelHandlerContext ctx) throws Exception { ChannelPipeline cp = ctx.getPipeline(); if (cp.get(WebSocketServerProtocolHandshakeHandler.class) == null) { // Add the WebSocketHandshakeHandler before this one. ctx.getPipeline().addBefore(ctx.getName(), WebSocketServerProtocolHandshakeHandler.class.getName(), new WebSocketServerProtocolHandshakeHandler(websocketPath, subprotocols, allowExtensions)); } }
@Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { if (LOG.isTraceEnabled()) { LOG.trace("Channel connected " + e); } allChannels.add(ctx.getChannel()); NettyServerCnxn cnxn = new NettyServerCnxn(ctx.getChannel(), zkServer, NettyServerCnxnFactory.this); ctx.setAttachment(cnxn); addCnxn(cnxn); }
@Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { State state = (State) ctx.getAttachment(); state.lastReadTime = System.currentTimeMillis(); ctx.sendUpstream(e); }
static ReadWriteStatus checkAttachment(ChannelHandlerContext ctx) { ReadWriteStatus rws = (ReadWriteStatus) ctx.getAttachment(); if (rws == null) { rws = new ReadWriteStatus(); ctx.setAttachment(rws); } return rws; }
@Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent event) throws Exception { Object o = event.getMessage(); if (!(o instanceof ChannelBuffer)) { ctx.sendUpstream(event); return; int readable = input.readableBytes(); if (readable <= 0) { return; if (buffer.readable()) { if (buffer instanceof DynamicChannelBuffer) { buffer.writeBytes(input.toByteBuffer()); message = buffer; } else { int size = buffer.readableBytes() + input.readableBytes(); message = org.apache.dubbo.remoting.buffer.ChannelBuffers.dynamicBuffer( size > bufferSize ? size : bufferSize); NettyChannel channel = NettyChannel.getOrAddChannel(ctx.getChannel(), url, handler); Object msg; int saveReaderIndex; Channels.fireMessageReceived(ctx, msg, event.getRemoteAddress()); buffer = org.apache.dubbo.remoting.buffer.ChannelBuffers.EMPTY_BUFFER; NettyChannel.removeChannelIfDisconnected(ctx.getChannel());
@Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { if (e.getCause() instanceof WebSocketHandshakeException) { DefaultHttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.BAD_REQUEST); response.setContent(ChannelBuffers.wrappedBuffer(e.getCause().getMessage().getBytes())); ctx.getChannel().write(response).addListener(ChannelFutureListener.CLOSE); } else { ctx.getChannel().close(); } }
@Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { if (!(e.getMessage() instanceof WebSocketFrame)) { DefaultHttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.FORBIDDEN); ctx.getChannel().write(response); } else { ctx.sendUpstream(e); } } };
NettyUtils.write(ctx.getChannel(), ackBytes, new ChannelFutureAggregator(sub.getDestination(), sub, packet.getType(), ackBytes.length, System.nanoTime() - start)); } else { byte[] errorBytes = NettyUtils.errorPacket(401, MessageFormatter.format("destination or clientId is null", sub.toString()).getMessage()); NettyUtils.write(ctx.getChannel(), errorBytes ,new ChannelFutureAggregator(sub.getDestination(), sub, packet.getType(), errorBytes.length, System.nanoTime() - start, (short) 401)); NettyUtils.write(ctx.getChannel(), ackBytes, new ChannelFutureAggregator(unsub.getDestination(), unsub, packet.getType(), ackBytes.length, System.nanoTime() - start)); } else { byte[] errorBytes = NettyUtils.errorPacket(401, MessageFormatter.format("destination or clientId is null", unsub.toString()).getMessage()); NettyUtils.write(ctx.getChannel(), errorBytes, new ChannelFutureAggregator(unsub.getDestination(), unsub, packet.getType(), errorBytes.length, System.nanoTime() - start, (short) 401)); NettyUtils.write(ctx.getChannel(), body, new ChannelFutureAggregator(get.getDestination(), get, packet.getType(), body.length, System.nanoTime() - start, message.getId() == -1)); NettyUtils.write(ctx.getChannel(), body, new ChannelFutureAggregator(get.getDestination(), get, packet.getType(), body.length, System.nanoTime() - start, message.getId() == -1));// 输出数据 NettyUtils.write(ctx.getChannel(), errorBytes, new ChannelFutureAggregator(get.getDestination(), get, packet.getType(), errorBytes.length, System.nanoTime() - start, (short) 401)); if (ack.getBatchId() == 0L) { byte[] errorBytes = NettyUtils.errorPacket(402, MessageFormatter.format("batchId should assign value", ack.toString()).getMessage()); NettyUtils.write(ctx.getChannel(), errorBytes, new ChannelFutureAggregator(ack.getDestination(), ack, packet.getType(), errorBytes.length, System.nanoTime() - start, (short) 402)); } else if (ack.getBatchId() == -1L) { // -1代表上一次get没有数据,直接忽略之
@Override protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception { // Will use the first bytes to detect a protocol. if (buffer.readableBytes() < bytesForProtocolCheck) { return null; } ChannelPipeline pipeline = ctx.getPipeline(); if (!loginProtocol.applyProtocol(buffer, pipeline)) { byte[] headerBytes = new byte[bytesForProtocolCheck]; buffer.getBytes(buffer.readerIndex(), headerBytes, 0, bytesForProtocolCheck); LOG.error( "Unknown protocol, discard everything and close the connection {}. Incoming Bytes {}", ctx.getChannel().getId(), BinaryUtils.getHexString(headerBytes)); close(buffer, channel); return null; } else { pipeline.remove(this); } // Forward the current read buffer as is to the new handlers. return buffer.readBytes(buffer.readableBytes()); }
final Request request = (Request) e.getMessage(); request.setAttachment(URLParamType.host.getName(), NetUtils.getHostName(ctx.getChannel().getRemoteAddress())); MotanErrorMsgConstant.SERVICE_REJECT)); response.setProcessTime(System.currentTimeMillis() - processStartTime); e.getChannel().write(response);
private ChannelFuture finishEncode(final ChannelHandlerContext ctx, final ChannelEvent evt) { ChannelFuture future = Channels.succeededFuture(ctx.getChannel()); ctx.sendDownstream(evt); final ChannelBuffer footer = ChannelBuffers.dynamicBuffer(ctx.getChannel().getConfig().getBufferFactory()); final boolean gzip = isGzip(); synchronized (deflater) { footer.writeBytes(gzipHeader); int crcValue = (int) crc.getValue(); int uncBytes = deflater.getTotalIn(); footer.writeByte(crcValue); footer.writeByte(crcValue >>> 8); footer.writeByte(crcValue >>> 16); footer.writeByte(crcValue >>> 24); if (footer.readable()) { future = Channels.future(ctx.getChannel()); Channels.write(ctx, future, footer); future.addListener(new ChannelFutureListener() { public void operationComplete(ChannelFuture future) throws Exception { ctx.sendDownstream(evt);
private List<MessageEvent> consolidatedWrite(final List<MessageEvent> pendingWrites) { final int size = pendingWrites.size(); if (size == 1) { ctx.sendDownstream(pendingWrites.remove(0)); return pendingWrites; data[i] = (ChannelBuffer) pendingWrites.get(i).getMessage(); ChannelBuffer composite = ChannelBuffers.wrappedBuffer(data); ChannelFuture future = Channels.future(ctx.getChannel()); future.addListener(new ChannelFutureListener() { public void operationComplete(ChannelFuture future) throws Exception { Channels.write(ctx, future, composite); return null;
public void messageReceived(final ChannelHandlerContext ctx, MessageEvent e) throws Exception { ChannelBuffer buffer = (ChannelBuffer) e.getMessage(); final Packet packet = Packet.parseFrom(buffer.readBytes(buffer.readableBytes()).array()); switch (packet.getVersion()) { case SUPPORTED_VERSION: MDC.put("destination", clientIdentity.getDestination()); embeddedServer.subscribe(clientIdentity); ctx.setAttachment(clientIdentity);// 设置状态数据 NettyUtils.ack(ctx.getChannel(), new ChannelFutureListener() {
@Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { NettyChannel channel = NettyChannel.getOrAddChannel(ctx.getChannel(), url, handler); try { handler.received(channel, e.getMessage()); } finally { NettyChannel.removeChannelIfDisconnected(ctx.getChannel()); } }
byte[] in = new byte[compressed.readableBytes()]; compressed.readBytes(in); z.next_in = in; z.next_in_index = 0; ChannelBuffer decompressed = ChannelBuffers.dynamicBuffer( compressed.order(), out.length, ctx.getChannel().getConfig().getBufferFactory()); z.next_out = out; z.next_out_index = 0;
@Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { NetData.NetMessage message = (NetData.NetMessage) e.getMessage(); if (message.hasServerInfo()) { logger.info("Received server info"); serverInfo = new ServerInfoMessageImpl(message.getServerInfo()); } else { logger.error("Received unexpected message"); } // in any case, we're done, so close the connection ctx.getChannel().close(); }
/** * Fail all buffered writes that are left. * See <a href="https://github.com/netty/netty/issues/308>#308</a> for more details. */ public void afterRemove(ChannelHandlerContext ctx) throws Exception { Throwable cause = null; for (;;) { MessageEvent ev = queue.poll(); if (ev == null) { break; } if (cause == null) { cause = new IOException("Unable to flush message"); } ev.getFuture().setFailure(cause); } if (cause != null) { Channels.fireExceptionCaughtLater(ctx.getChannel(), cause); } } }
private void processRequest(final ChannelHandlerContext ctx, final Request request, long processStartTime) { Object result; try { result = messageHandler.handle(serverChannel, request); } catch (Exception e) { LoggerUtil.error("NettyChannelHandler processRequest fail!request:" + MotanFrameworkUtil.toString(request), e); result = MotanFrameworkUtil.buildErrorResponse(request.getRequestId(), new MotanServiceException("process request fail. errmsg:" + e.getMessage())); } MotanFrameworkUtil.logRequestEvent(request.getRequestId(), "after invoke biz method: " + MotanFrameworkUtil.getFullMethodString(request), System.currentTimeMillis()); DefaultResponse response = null; if (!(result instanceof DefaultResponse)) { response = new DefaultResponse(result); } else { response = (DefaultResponse) result; } response.setRequestId(request.getRequestId()); response.setProcessTime(System.currentTimeMillis() - processStartTime); if (ctx.getChannel().isConnected()) { ChannelFuture channelFuture = ctx.getChannel().write(response); if (channelFuture != null && request instanceof TraceableRequest) { channelFuture.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { MotanFrameworkUtil.logRequestEvent(request.getRequestId(), "after send rpc response: " + MotanFrameworkUtil.getFullMethodString(request), System.currentTimeMillis()); ((TraceableRequest) request).onFinish(); } }); } } }
@Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { NetData.NetMessage message = (NetData.NetMessage) e.getMessage(); if (message.hasServerInfoRequest()) { NetData.ServerInfoMessage serverInfo = networkSystem.getServerInfoMessage(); ctx.getChannel().write(NetData.NetMessage.newBuilder().setServerInfo(serverInfo).setTime(serverInfo.getTime()).build()); } else if (message.hasJoin()) { receivedConnect(message.getJoin()); } else if (message.getModuleRequestCount() > 0) { sendModules(message.getModuleRequestList()); } else { logger.error("Received unexpected message"); } }