Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Netty
#21
Тогда да. Дешифруем и разделяем.
Ответ
#22
Подскажите что не так делаю. Ниже работающий правильно вариант, но без Lenght decodera.
[src=java]
@Override
public ChannelPipeline getPipeline() throws Exception {

final ChannelPipeline pipeline = Channels.pipeline();

pipeline.addLast("decoder", new PacketFrameDecoder());

pipeline.addLast("encoder", new PacketFrameEncoder());

pipeline.addLast("executor", getExecutorHandler());

pipeline.addLast("handler", new ClientChannelHandler()); //Client logic

return pipeline;
}
[/src]
Если его добавить , то не один не отрабатывает, только коннект происходит.
[src=java]
public class LengthDecoder extends LengthFieldBasedFrameDecoder {

private static final Logger log = LoggerFactory.getLogger(LengthDecoder.class.getSimpleName());

public LengthDecoder() {
super(Short.MAX_VALUE, 0, 2);
}

@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
log.info("Lengh Based Decoder, decode()");

log.info(NetUtils.getHexDump(buffer.array()));

return super.decode(ctx, channel, buffer); //To change body of overridden methods use File | Settings | File Templates.
}
}
[/src] Добавлял после первого декодера.
Ответ
#23
В декодерах проверь, что они возвращяют. Если null, то нужно разобраться почему.
Ответ
#24
У них метод decode() даже не вызывается , если добавить этот LenghtDecoder
Ответ
#25
А сам LenghtDecoder не null возвращает?
Ответ
#26
Не вызывается вообще, и не возвращает ничего ) В pipeline важен же порядок, в каком добавлять ? Если там один pipeline.addLast("decoder", new PacketFrameDecoder());, то все хорошо работает, если после него еще один pipeline.addLast("Lenghtdecoder", new LengthDecoder());, то ни один из них не вызывается
На русском статей кроме хабра нету больше информации по netty ?
Ответ
#27
У меня все обработчики в таком же порядке, и все работает. Могу лишь посоветовать попробовать поменять местами или начать добавлять с минимума.
Единственная проблема с LengthFieldBasedFrameDecoder`ом у меня была из-за того, что я не указал в Bootstrap`e, что нужно создавать буферы с порядком байт little endian.
Ответ
#28
ChannelBuffer обработанный должен идти дальше по обработчикам в порядке, который указан так ?
Ответ
#29
Так) Только не обязательно ChannelBuffer, сигнатура метода protected Object decode(... Можете что угодно передавать, главное чтобы дальше этот объект правильно обработали.
Ответ
#30
А как в Bootstrape сделать littleEndian ?, а то я в декодере возвращаю
[src=java]return ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, allData);[/src]
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Netty StartUp grizly 15 7,228 08-11-2013, 04:49 PM
Последний пост: KID
  Netcore Source (Netty) n3k0nation 3 4,531 05-03-2010, 07:10 PM
Последний пост: Aquanox

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)