Package org.rzo.netty.ahessian.rpc.client

Source Code of org.rzo.netty.ahessian.rpc.client.ReconnectHandler

package org.rzo.netty.ahessian.rpc.client;

import java.net.ConnectException;
import java.util.Timer;
import java.util.TimerTask;

import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.rzo.netty.ahessian.Constants;

public class ReconnectHandler extends SimpleChannelUpstreamHandler
{
  private static Timer timer = new Timer();
  private  long RECONNECT_DELAY = 5000;
  private BootstrapProvider _bootstrap;
 
  public ReconnectHandler(BootstrapProvider bootstrap, long reconnectDelay)
  {
    RECONNECT_DELAY = reconnectDelay;
    _bootstrap = bootstrap;
  }
 
  public ReconnectHandler(BootstrapProvider bootstrap)
  {
    _bootstrap = bootstrap;
  }
 
    @Override
      public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) {
      ctx.sendUpstream(e);
      Constants.ahessianLogger.warn("channel closed wait to reconnect ...");
          timer.schedule(new TimerTask() {
              public void run() {
                Constants.ahessianLogger.warn("reconnecting...");
                  ChannelFuture f = _bootstrap.getBootstrap().connect();
                  try
        {
          f.awaitUninterruptibly();
        }
        catch (Exception e)
        {
          // TODO Auto-generated catch block
          Constants.ahessianLogger.warn("", e);
            }
                if (f.isSuccess())
                  Constants.ahessianLogger.warn("connected");
                else
                {
                  Constants.ahessianLogger.warn("not connected");
                }
                
              }
          }, RECONNECT_DELAY);
      }
   
    @Override
      public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
          Throwable cause = e.getCause();
          cause.printStackTrace();
          if (cause instanceof ConnectException)
          {
            Constants.ahessianLogger.warn("conection lost");
          }
          try
          {
          ctx.getChannel().close();
          }
          catch (Exception ex)
          {
           
          }
      }
   
 
}
TOP

Related Classes of org.rzo.netty.ahessian.rpc.client.ReconnectHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.