@Override public ServerMessage send(ServerSession session, ServerMessage message) { Object data = message.getData(); if (data instanceof BinaryData) { ServerMessage.Mutable result = bayeuxServer.newMessage(); result.putAll(message); BinaryData binaryData = (BinaryData)data; Object binary = binaryData.get(BinaryData.DATA); String encoded; if (binary instanceof byte[]) { encoded = Z85.encoder.encodeBytes(binaryData.asBytes()); } else if (binary instanceof ByteBuffer) { encoded = Z85.encoder.encodeByteBuffer(binaryData.asByteBuffer()); } else { throw new IllegalArgumentException("Cannot Z85 encode " + binary); } Map<String, Object> newData = new HashMap<>(binaryData); newData.put(BinaryData.DATA, encoded); result.setData(newData); Map<String, Object> ext = result.getExt(true); ext.put(BinaryData.EXT_NAME, new HashMap<>(0)); return result; } else { return message; } } }
@Override public void handshake(Map<String, Object> template, ClientSession.MessageListener callback) { if (_session != null) { throw new IllegalStateException(); } ServerSessionImpl session = new ServerSessionImpl(_bayeux, this, _idHint); ServerMessage.Mutable hsMessage = newMessage(); if (template != null) { hsMessage.putAll(template); } String messageId = newMessageId(); hsMessage.setId(messageId); hsMessage.setChannel(Channel.META_HANDSHAKE); registerCallback(messageId, callback); doSend(session, hsMessage, Promise.from(hsReply -> { if (hsReply != null && hsReply.isSuccessful()) { _session = session; ServerMessage.Mutable cnMessage = newMessage(); cnMessage.setId(newMessageId()); cnMessage.setChannel(Channel.META_CONNECT); cnMessage.getAdvice(true).put(Message.INTERVAL_FIELD, -1L); cnMessage.setClientId(session.getId()); doSend(session, cnMessage, Promise.from(cnReply -> { // Nothing more to do. }, failure -> messageFailure(cnMessage, failure))); } }, failure -> messageFailure(hsMessage, failure))); }
@Override protected void send(Message.Mutable message) { if (message instanceof ServerMessage.Mutable) { send(_session, (ServerMessage.Mutable)message); } else { ServerMessage.Mutable mutable = newMessage(); mutable.putAll(message); send(_session, mutable); } }
public ServerMessage.Mutable newMessage(ServerMessage original) { ServerMessage.Mutable mutable = newMessage(); mutable.putAll(original); return mutable; }