@Override
 public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent event) {
   Throwable t = event.getCause();
   if (t instanceof ConnectException) {
     LOG.warn("Connection to pacemaker failed. Trying to reconnect {}", t.getMessage());
   } else {
     LOG.error("Exception occurred in Pacemaker.", t);
   }
   client.reconnect();
 }
  @Override
  public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent event) {
    // register the newly established channel
    Channel channel = ctx.getChannel();
    client.channelConnected(channel);

    LOG.info(
        "Connection established from {} to {}",
        channel.getLocalAddress(),
        channel.getRemoteAddress());
  }
  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent event) {
    LOG.debug("Got Message: {}", event.getMessage().toString());
    Object evm = event.getMessage();

    if (evm instanceof ControlMessage) {
      LOG.debug("Got control message: {}", evm.toString());
      return;
    } else if (evm instanceof HBMessage) {
      client.gotMessage((HBMessage) evm);
    } else {
      LOG.warn("Got unexpected message: {} from server.", evm);
    }
  }