Search in sources :

Example 1 with Processor

use of org.lanternpowered.server.network.message.processor.Processor in project LanternServer by LanternPowered.

the class MessageCodecHandler method processMessage.

private void processMessage(Message message, List<Object> output, Protocol protocol, ProtocolState state, CodecContext context) {
    if (message == NullMessage.INSTANCE) {
        return;
    }
    if (message instanceof BulkMessage) {
        ((BulkMessage) message).getMessages().forEach(message1 -> processMessage(message1, output, protocol, state, context));
        return;
    }
    final MessageRegistration messageRegistration = (MessageRegistration) protocol.inbound().findByMessageType(message.getClass()).orElseThrow(() -> new DecoderException("The returned message type is not attached to the used protocol state (" + state.toString() + ")!"));
    final List<Processor> processors = messageRegistration.getProcessors();
    // Only process if there are processors found
    if (!processors.isEmpty()) {
        for (Processor processor : processors) {
            // The processor should handle the output messages
            processor.process(context, message, output);
        }
    } else {
        final Optional<Handler> optHandler = messageRegistration.getHandler();
        if (optHandler.isPresent()) {
            // Add the message to the output
            output.add(new HandlerMessage(message, optHandler.get()));
        } else {
            output.add(message);
        }
    }
}
Also used : DecoderException(io.netty.handler.codec.DecoderException) BulkMessage(org.lanternpowered.server.network.message.BulkMessage) MessageRegistration(org.lanternpowered.server.network.message.MessageRegistration) Processor(org.lanternpowered.server.network.message.processor.Processor) Handler(org.lanternpowered.server.network.message.handler.Handler) HandlerMessage(org.lanternpowered.server.network.message.HandlerMessage)

Example 2 with Processor

use of org.lanternpowered.server.network.message.processor.Processor in project LanternServer by LanternPowered.

the class MessageProcessorHandler method acceptOutboundMessage.

@Override
public boolean acceptOutboundMessage(Object msg) throws Exception {
    final Message message = (Message) msg;
    final Protocol protocol = this.codecContext.getSession().getProtocol();
    final MessageRegistration registration = protocol.outbound().findByMessageType(message.getClass()).orElse(null);
    if (registration == null) {
        throw new EncoderException("Message type (" + message.getClass().getName() + ") is not registered in state " + this.codecContext.getSession().getProtocolState().name() + "!");
    }
    final List<Processor> processors = ((MessageRegistration) protocol.outbound().findByMessageType(message.getClass()).get()).getProcessors();
    // Only process if there are processors found
    if (!processors.isEmpty()) {
        final List<Object> messages = new ArrayList<>();
        for (Processor processor : processors) {
            // The processor should handle the output messages
            processor.process(this.codecContext, message, messages);
        }
        if (message instanceof ReferenceCounted && !messages.contains(message)) {
            ((ReferenceCounted) message).release();
        }
        if (!messages.isEmpty()) {
            this.messages.set(messages);
        }
        return true;
    }
    return false;
}
Also used : EncoderException(io.netty.handler.codec.EncoderException) MessageRegistration(org.lanternpowered.server.network.message.MessageRegistration) Processor(org.lanternpowered.server.network.message.processor.Processor) Message(org.lanternpowered.server.network.message.Message) ArrayList(java.util.ArrayList) Protocol(org.lanternpowered.server.network.protocol.Protocol) ReferenceCounted(io.netty.util.ReferenceCounted)

Aggregations

MessageRegistration (org.lanternpowered.server.network.message.MessageRegistration)2 Processor (org.lanternpowered.server.network.message.processor.Processor)2 DecoderException (io.netty.handler.codec.DecoderException)1 EncoderException (io.netty.handler.codec.EncoderException)1 ReferenceCounted (io.netty.util.ReferenceCounted)1 ArrayList (java.util.ArrayList)1 BulkMessage (org.lanternpowered.server.network.message.BulkMessage)1 HandlerMessage (org.lanternpowered.server.network.message.HandlerMessage)1 Message (org.lanternpowered.server.network.message.Message)1 Handler (org.lanternpowered.server.network.message.handler.Handler)1 Protocol (org.lanternpowered.server.network.protocol.Protocol)1