Декодирование и кодирование нескольких типов пакетов в Netty - PullRequest
0 голосов
/ 24 февраля 2020

Итак, я работаю на нетти-сервере, который обрабатывает пакет указанного типа c. Этот netty-сервер был создан не мной, и я пытаюсь добавить к нему обработчик пакетов, декодер и кодировщик другого типа. Из-за плохой реализации существующих обработчиков я должен добавить свой, прежде чем так.

                                 channel.pipeline()
                                .addLast(new custom.PacketDecoder().server())  // My Packet Decoder
                                .addLast(new custom.PacketEncoder().server())  // My Packet Encoder
                                .addLast(new custom.NetworkHandler().server()) // My Packet Handler
                                .addLast("timeout", new ReadTimeoutHandler(30)) // Not made by me
                                .addLast("legacy_query", new LegacyPingHandler(ServerConnection.this)) // Not made by me
                                .addLast("splitter", new PacketSplitter()) // Not made by me
                                .addLast("decoder", new PacketDecoder(EnumProtocolDirection.SERVERBOUND)) // Not made by me
                                .addLast("prepender", new PacketPrepender()) // Not made by me
                                .addLast("encoder", new PacketEncoder(EnumProtocolDirection.CLIENTBOUND)) // Not made by me
                                .addLast("packet_handler", networkmanager); // Not made by me

На данный момент этот вид работы работает, но проблема в том, что если он получает пакеты, которые не являются моими, которые он должен обрабатывать, мои обработчики мешают этим пакетам проходить и обрабатываться правильно. Как передать не принадлежащие мне пакеты другим обработчикам, не касаясь их.

1 Ответ

0 голосов
/ 26 февраля 2020

Ваш обработчик должен проверить, имеет ли входящий пакет определенный c тип, который обработчик может обработать. Если пакет «не ваш», обработчик должен передать его в восходящем направлении - следующему обработчику в конвейере (для netty 4.x - ChannelHandlerContext.fireChannelRead(Object)). Может быть, эта документация может помочь.

...