Package org.rzo.netty.mcast.discovery

Source Code of org.rzo.netty.mcast.discovery.DiscoveryClient

package org.rzo.netty.mcast.discovery;

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

import java.net.InetAddress;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.rzo.netty.ahessian.Constants;
import org.rzo.netty.mcast.MulticastEndpoint;

public class DiscoveryClient extends MulticastEndpoint
{

private String  name;
private Set<String>  hosts = Collections.synchronizedSet(new HashSet<String>());
private volatile boolean stop = false;
private Set<DiscoveryListener>  listeners = Collections.synchronizedSet(new HashSet<DiscoveryListener>());

private static Executor executor = Executors.newCachedThreadPool();


public void init() throws Exception
{
  ChannelPipelineFactory factory = new ChannelPipelineFactory()
  {
    public ChannelPipeline getPipeline() throws Exception
    {
      ChannelPipeline pipeline = pipeline();
      pipeline.addLast("discoveryServer", new SimpleChannelUpstreamHandler()
      {

        @Override
        public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception
        {
          try
          {
          String response = getStringMessage(e);
          if (response == null)
            return;
          String[] resp = response.split(":");
          if (resp.length == 2)
          {
            String host = resp[0];
            InetAddress.getByName(host);
            int port = Integer.parseInt(resp[1]);
            if (!hosts.contains(response))
            {
            hosts.add(response);
            for (DiscoveryListener listener : listeners)
            {
              listener.newHost(name, response);
            }
            }
           
          }
          }
          catch (Exception ex)
          {
            Constants.ahessianLogger.warn("", ex);
          }
        }
      });
      return pipeline;
    }

  };
  super.init(factory);
 
}

public void start() throws Exception
{
  stop = false;
  discoverServices();
}



private void discoverServices() throws Exception
{
  executor.execute(new Runnable()
  {
    public void run()
    {
      while (!stop)
      {
        try
        {
          send(ChannelBuffers.wrappedBuffer((name).getBytes()));
        }
        catch (Exception e)
        {
          Constants.ahessianLogger.warn("", e);
        }
        try
        {
          Thread.sleep(1000);
        }
        catch (InterruptedException e)
        {
          Constants.ahessianLogger.warn("", e);
        }
      }
    }
  });
}



public String getName()
{
  return name;
}


public void setName(String name)
{
  this.name = name;
}

public void stop()
{
  stop = true;
}

public void addListener(DiscoveryListener listener)
{
  listeners.add(listener);
}

public void removeHost(String host)
{
  hosts.remove(host);
}

}
TOP

Related Classes of org.rzo.netty.mcast.discovery.DiscoveryClient

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.