package org.shanbo.feluca.node.leader; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.ChannelUpstreamHandler; import org.jboss.netty.channel.Channels; import org.jboss.netty.handler.codec.http.HttpRequestDecoder; import org.jboss.netty.handler.codec.http.HttpResponseEncoder; import org.shanbo.feluca.common.Constants; import org.shanbo.feluca.datasys.DataServer; import org.shanbo.feluca.datasys.ftp.DataFtpServer; import org.shanbo.feluca.node.http.BaseChannelHandler; import org.shanbo.feluca.node.http.BaseNioServer; import org.shanbo.feluca.node.http.Handler; import org.shanbo.feluca.node.http.Handlers; import org.shanbo.feluca.node.request.LeaderJobRequest; import org.shanbo.feluca.node.request.LeaderStatusRequest; import org.shanbo.feluca.util.GlobalInitializer; import org.shanbo.feluca.util.ZKClient; public class LeaderServer extends BaseNioServer{ LeaderModule module; DataServer dataServer; Handlers handlers = new Handlers(); final BaseChannelHandler channel = new LeaderNettyChannel(handlers); public String serverName() { return "feluca.leader"; } @Override protected ChannelUpstreamHandler finalChannelUpstreamHandler() { return null; } public LeaderServer(){ super(); } public int defaultPort() { return 12020; } public void addHandler(Handler... hander){ this.handlers.addHandler(hander); } /** * handle http */ protected ChannelPipelineFactory getChannelPipelineFactory(){ return new ChannelPipelineFactory(){ public ChannelPipeline getPipeline() throws Exception{ // Create a default pipeline implementation. ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast("decoder", new HttpRequestDecoder()); pipeline.addLast("encoder", new HttpResponseEncoder()); pipeline.addLast("channel", channel); return pipeline; } }; } @Override public String zkPathRegisterTo() { return Constants.Base.ZK_LEADER_PATH ; } @Override public void preStart() throws Exception { GlobalInitializer.call(); ZKClient.get().createIfNotExist(zkPathRegisterTo()); module = new LeaderModule(); this.addHandler(new LeaderJobRequest(module)); this.addHandler(new LeaderStatusRequest(module)); module.init(zkPathRegisterTo(), getServerAddress()); super.preStart(); //start http server ZKClient.get().createIfNotExist(Constants.Base.FDFS_ZK_ROOT); dataServer = new DataFtpServer(); dataServer.start(); } @Override public void postStop() throws Exception { module.shutdown(); super.postStop(); dataServer.stop(); GlobalInitializer.shutdown(); } /** * test * @param args */ public static void main(String[] args) { LeaderServer server = new LeaderServer(); server.start(); } }