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; }
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); } } }
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); } }
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); } }
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) {