package com.joelpm.bidiMessages.server; import org.apache.log4j.Logger; import org.apache.thrift.TProcessor; import org.apache.thrift.TProcessorFactory; import org.apache.thrift.server.TServer; import org.apache.thrift.server.TThreadPoolServer; import org.apache.thrift.transport.TServerSocket; import org.apache.thrift.transport.TServerTransport; import org.apache.thrift.transport.TTransport; import com.joelpm.bidiMessages.generated.MessageService; /** * A simple server that accepts messages from clients and broadcasts * them out to all connected clients. * * @author Joel Meyer */ public class Server { private static final Logger LOGGER = Logger.getLogger(Server.class); public static void main(String[] args) throws Exception { final int port = Integer.parseInt(args[0]); final MessageDistributor messageDistributor = new MessageDistributor(); new Thread(messageDistributor).start(); // Using our own TProcessorFactory gives us an opportunity to get // access to the transport right after the client connection is // accepted. TProcessorFactory processorFactory = new TProcessorFactory(null) { @Override public TProcessor getProcessor(TTransport trans) { messageDistributor.addClient(new MessageServiceClient(trans)); return new MessageService.Processor(messageDistributor); } }; TServerTransport serverTransport = new TServerSocket(port); TThreadPoolServer.Args serverArgs = new TThreadPoolServer.Args(serverTransport); serverArgs.processorFactory(processorFactory); TServer server = new TThreadPoolServer(serverArgs); LOGGER.info("Server started"); server.serve(); } }