Cambios

De ChuWiki
Saltar a: navegación, buscar

Pipeline con netty

1576 bytes añadidos, 14:15 4 ago 2018
Frame Extractor
*(9) Avisamos al siguiente handler, pasándole nuestro buffer line. No liberamos el buffer line porque es responsabilidad del que lo recibe.
*(10) Liberamos el buffer que nos ha llegado por parámetro. Como ya no lo necesitamos y no se lo hemos pasado a nadie, es nuestra responsabilidad liberarlo.
 
=== StringDecoder ===
 
Nuestro siguiente ChannelInboundHander recibirá los bytes que nos envía el FrameExtractor, ya sin retorno de carro. Lo único que tiene que hacer es traducirlo a String para pasárselo al siguiente. El código puede ser como este
 
<syntaxhighlight lang="java">
public class StringDecoder extends ChannelInboundHandlerAdapter{
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ByteBuf buf =(ByteBuf)msg;
String text = buf.toString(Charset.defaultCharset());
ctx.fireChannelRead(text);
buf.release();
}
}
</syntaxhighlight/>
 
Nada especial. El msg que recibimos como parámetro es el ByteBuf (line) que nos entregó el handler anterior, hacemos el cast, lo convertimos a String y se lo pasamos al siguiente handler con ctx.fireChannelRead(text). El buffer que recibimos del handler anterior lo liberamos nosotros, ya que no lo necesitamos más y no se lo hemos pasado a nadie.
 
=== Lógica de negocio ===
 
Nuestro tercer handler recibirá directamente el String, así que hacemos con él ya lo que nos interese.
 
<syntaxhighlight lang="java">
public class ServerHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
String text = (String)msg;
System.out.println(text);
}
}
</syntaxhighlight>
 
El msg recibido es el String que nos envía el handler anterior y solo tenemos que hacer el cast y sacarlo por pantalla, o lo que queramos.
 
=== Todo junto ===
[[Categoría:Java]][[Categoría:Netty]]

Menú de navegación