Package org.rzo.netty.ahessian.application.jmx.remote.client

Source Code of org.rzo.netty.ahessian.application.jmx.remote.client.RPCClientSessionPipelineFactory

package org.rzo.netty.ahessian.application.jmx.remote.client;

import static org.jboss.netty.channel.Channels.pipeline;

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

import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.rzo.netty.ahessian.log.OutLogger;
import org.rzo.netty.ahessian.session.ClientSessionFilter;

public class RPCClientSessionPipelineFactory implements ChannelPipelineFactory
{

  ChannelPipelineFactory _mixinFactory;
  ClientSessionFilter _sessionFilter;
  private static Timer timer = new Timer();
  private static long RECONNECT_DELAY = 5000;
  ClientBootstrap _bootstrap;


 
  RPCClientSessionPipelineFactory(ChannelPipelineFactory mixinFactory, ClientBootstrap bootstrap)
  {
    _mixinFactory = mixinFactory;
    _sessionFilter = new ClientSessionFilter(_mixinFactory);
    _bootstrap = bootstrap;
  }
 
  public ChannelPipeline getPipeline() throws Exception
 
    ChannelPipeline pipeline = pipeline(); // Note the static import.
    pipeline.addLast("logger",new OutLogger("1"));
    pipeline.addLast("reconnector", new SimpleChannelUpstreamHandler()
                {
           
            @Override
              public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) {
              ctx.sendUpstream(e);
              System.out.println("channel closed wait to reconnect ...");
                  timer.schedule(new TimerTask() {
                      public void run() {
                        System.out.println("reconnecting...");
                         ChannelFuture f = _bootstrap.connect();
                         try
              {
                           System.out.println("future wait");
                f.awaitUninterruptibly();
                         System.out.println("future wait terminated");
              }
              catch (Exception e)
              {
                // TODO Auto-generated catch block
                e.printStackTrace();
                 }
                       if (f.isSuccess())
                       System.out.println("connected");
                       else
                       {
                         System.out.println("not connected");
                        // f.getChannel().close();
                       }
                        
                      }
                  }, RECONNECT_DELAY);
              }
           
            @Override
              public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
                  Throwable cause = e.getCause();
                  if (cause instanceof ConnectException)
                  {
                    System.out.println("conection lost");
                  }
                  ctx.getChannel().close();
              }
                }
);
    pipeline.addLast("sessionFilter", _sessionFilter);

    return pipeline;
  }

}
TOP

Related Classes of org.rzo.netty.ahessian.application.jmx.remote.client.RPCClientSessionPipelineFactory

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.