package org.rzo.yajsw.srvmgr.hub; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.socket.oio.OioServerSocketChannelFactory; import org.rzo.netty.ahessian.rpc.server.HessianRPCServiceHandler; import org.rzo.netty.ahessian.rpc.server.ImmediateInvokeService; import org.rzo.yajsw.os.ServiceInfo; import org.rzo.yajsw.srvmgr.client.AsyncServiceManagerServer; import org.rzo.yajsw.srvmgr.client.Host; public class HubServiceServer implements HubService { HashMap<String, AsyncServiceManagerServer> _proxies; Comparator<Host> hostsComparator = new Comparator<Host>() { public int compare(Host o1, Host o2) { return o1.getName().compareTo(o2.getName()); } }; Comparator<ServiceInfo> servicesComparator = new Comparator<ServiceInfo>() { public int compare(ServiceInfo o1, ServiceInfo o2) { return o1.getName().compareTo(o2.getName()); } }; HubServiceServer(int port, String acl, HashMap<String, AsyncServiceManagerServer>proxies) { _proxies = proxies; Executor executor = Executors.newFixedThreadPool(200); // Configure the server. ServerBootstrap bootstrap = new ServerBootstrap( new OioServerSocketChannelFactory( executor, executor)); HessianRPCServiceHandler factory = new HessianRPCServiceHandler(executor); factory.addService("default", new ImmediateInvokeService(this, HubService.class, factory)); bootstrap.setPipelineFactory( new RPCServerPipelineFactory(executor, factory, acl)); // Bind and start to accept incoming connections. Channel channel = bootstrap.bind(new InetSocketAddress(port)); } public List<Host> getHosts() { List<Host> result; synchronized(HubMain.hostsList) { result = new ArrayList(HubMain.hostsList.values()); } Collections.sort(result, hostsComparator); System.out.println("getHosts #"+result.size()); return result; } public List<ServiceInfo> getServices() { List<ServiceInfo> result; synchronized(HubMain.servicesList) { result = new ArrayList(HubMain.servicesList); } Collections.sort(result, servicesComparator); System.out.println("getServices #"+result.size()); return result; } public void hide(String serviceName, String hostName) { synchronized(HubMain.hiddenList) { System.out.println("hiding "+serviceName); HubMain.hiddenList.add(serviceName); } } public void start(String serviceName, String hostName) { AsyncServiceManagerServer proxy = _proxies.get(hostName); if (proxy != null) proxy.start(serviceName); } public void stop(String serviceName, String hostName) { AsyncServiceManagerServer proxy = _proxies.get(hostName); if (proxy != null) proxy.stop(serviceName); } }