package eu.dnetlib.openaire.thrift;

import org.apache.log4j.Logger;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;

public class ThriftServer {
	private OpenAIREConnector.Iface openAireConnector;
	private int port;
	private int timeout;
	private Thread thread;

	public void setOpenAireConnector(final OpenAIREConnector.Iface openAireConnector) {
		this.openAireConnector = openAireConnector;
	}
	
	public void setPort(final int port) {
		this.port = port;
	}
	
	public void setTimeout(final int timeout) {
		this.timeout = timeout;
	}
	
	public void start() {
		thread = new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					new TThreadPoolServer(new TThreadPoolServer.Args(new TServerSocket(port, timeout)).processor(new OpenAIREConnector.Processor<OpenAIREConnector.Iface>(openAireConnector))).serve();
				} catch (final TTransportException e) {
					Logger.getLogger(ThriftServer.class).error("Error starting thrift server", e);
				}
			}
		});
		thread.start();
	}
	
	public void stop() {
		thread.interrupt();
	}
}
