@Override public <T extends Message> IoBufferEx encode(MessageEncoder<T> encoder, T message, IoBufferAllocatorEx<?> allocator, int flags) { return encode("io", encoder, message, allocator, flags); }
/** * Initializes the transport buffer cache. */ public void initCache() { if (cacheRef != null) { throw new IllegalStateException("Cache already initialized"); } cacheRef = new CacheRef(); }
@Override public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { assert (message != null) : "AMQP message is null"; AmqpMessage amqpMessage = (AmqpMessage)message; IoBufferEx buffer; if (amqpMessage.hasCache()) { buffer = cachingEncoder.encode(encoder, amqpMessage, allocator, FLAG_SHARED | FLAG_ZERO_COPY | FLAG_DIRECT); } else { buffer = encodeInternal(session, allocator, FLAG_ZERO_COPY, amqpMessage); } out.write(buffer); }
protected final <T extends Message> IoBufferEx encode(String cacheKey, MessageEncoder<T> encoder, T message, IoBufferAllocatorEx<?> allocator, int flags) { ConcurrentMap<String, IoBufferEx> cache = message.getCache(); // if cache is not initialized, throw exception (caller should guard) if (cache == null) { throw new IllegalStateException("Cache not initialized"); } // lookup existing cached encoding entry IoBufferEx cachedBuffer = cache.get(cacheKey); if (cachedBuffer == null) { // when cachedBuffer is null, perform encode, then cache the result // with standard atomic race condition awareness (put-if-absent) if ((flags & FLAG_ZERO_COPY) != 0) { if (!cache.isEmpty()) { flags &= ~FLAG_ZERO_COPY; } } IoBufferEx newCachedBuffer = encoder.encode(allocator, message, flags); if (newCachedBuffer instanceof MessageBuffer<?>) { MessageBuffer<?> cacheableBuffer = (MessageBuffer<?>) newCachedBuffer; cacheableBuffer.setAutoCache(true); } cachedBuffer = cache.putIfAbsent(cacheKey, newCachedBuffer); if (cachedBuffer == null) { cachedBuffer = newCachedBuffer; } } return cachedBuffer; }
@Override protected MessageBuffer<T> duplicate0() { return create0(this, this.buf.duplicate()); }
protected void logMessageReceived(IoSession session, Object message) { if (getMessageReceivedStrategy().shouldLog(logger)) { if (message instanceof Message) { message = ((Message) message).toVerboseString(); } getMessageReceivedStrategy().log(logger, receivedFormat, session.getId(), message); } }
@Override public void messageReceived(IoSession session, Object message) throws Exception { if (message instanceof IoBuffer) { IoBuffer buf = (IoBuffer) message; for (IoSession client : clients) { writeOrClose(client, buf); } buf.skip(buf.remaining()); } else { if (message instanceof Message) { ((Message)message).initCache(); } for (IoSession client : clients) { writeOrClose(client, message); } } }
@Override public void encode(IoSession session, Object in, ProtocolEncoderOutput out) throws Exception { IoMessage message = (IoMessage)in; if (message.hasCache()) { // shared IoBufferEx buf = cachingEncoder.encode(encoder, message, allocator, FLAG_SHARED | FLAG_ZERO_COPY); out.write(buf); } else { // not shared IoBufferEx buf = message.getBuffer(); out.write(buf); } }
@Override protected MessageBuffer<T> asReadOnlyBuffer0() { return create0(this, this.buf.asReadOnlyBuffer()); }
protected void logMessageSent(IoSession session, Object message) { if (getMessageSentStrategy().shouldLog(logger)) { if (message instanceof Message) { message = ((Message) message).toVerboseString(); } getMessageSentStrategy().log(logger, sentFormat, session.getId(), message); } }
@Override public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { WsMessage wsMessage = (WsMessage) message; if (wsMessage.hasCache()) { IoBufferEx buf = cachingEncoder.encode(encoder, wsMessage, allocator, FLAG_SHARED | FLAG_ZERO_COPY); out.write(buf); } else { IoBufferEx buf = doEncode(allocator, FLAG_ZERO_COPY, wsMessage); out.write(buf); } }
Message message = (Message) writeRequest.getMessage(); String nextProtocol = BridgeSession.LOCAL_ADDRESS.get(session).getOption(ResourceAddress.NEXT_PROTOCOL); if (message.hasCache()) { IoBufferEx cachedProtocolBuffer = message.getCache().get(nextProtocol); if (cachedProtocolBuffer != null) { if(cachedProtocolBuffer.capacity()==0) {
@Override protected MessageBuffer<T> slice0() { return create0(this, this.buf.slice()); }
protected void logFilterWrite(IoSession session, Object message) { if (getFilterWriteStrategy().shouldLog(logger)) { if (message instanceof Message) { message = ((Message) message).toVerboseString(); } getFilterWriteStrategy().log(logger, writeFormat, session.getId(), message); } }
@Override public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { SseMessage sseMessage = (SseMessage)message; if (sseMessage.hasCache()) { IoBufferEx buf = cachingEncoder.encode(encoder, sseMessage, allocator, FLAG_SHARED | FLAG_ZERO_COPY); out.write(buf); } else { IoBufferEx buf = doEncode(allocator, FLAG_ZERO_COPY, sseMessage); out.write(buf); } }