package com.bekwam.examples.javafx.nettyinaction.ch12;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.netty.channel.ChannelHandler.Sharable;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import javafx.application.Platform;
import javafx.beans.property.StringProperty;
/**
* Netty WebSocket handler that sets a JavaFX property receivingMessageModel
* in response to an incoming TextWebSocketFrame
*
* Based on WebSocketClient example in Netty project
*
* @author carlwalker
*
*/
@Sharable
public class EchoClientHandlerWS extends SimpleChannelInboundHandler<TextWebSocketFrame> {
private Logger logger = LoggerFactory.getLogger( EchoClientHandlerWS.class );
private final StringProperty receivingMessageModel;
public EchoClientHandlerWS(StringProperty receivingMessageModel) {
this.receivingMessageModel = receivingMessageModel;
}
@Override
protected void channelRead0(ChannelHandlerContext arg0, TextWebSocketFrame in) throws Exception {
if( logger.isDebugEnabled() ) {
logger.debug("[CHANNEL READ0] channel active=" + arg0.channel().isActive() + ", open=" + arg0.channel().isOpen());
}
final String cm = in.text();
Platform.runLater( () -> receivingMessageModel.set(cm) );
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
logger.error( "error in echo client", cause );
ctx.close();
}
}