All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.caiguoqing.uyuni.rpc.server.socketserver.SocketServer Maven / Gradle / Ivy

The newest version!
/**
 * 
 */
package org.caiguoqing.uyuni.rpc.server.socketserver;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import org.caiguoqing.uyuni.rpc.server.Server;
import org.caiguoqing.uyuni.rpc.server.ServerConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author org.caiguoqing
 * 
 */
public class SocketServer extends Server {
	private Logger logger = LoggerFactory.getLogger(SocketServer.class);
	private String errBegin = "RPCServer start failed:";
	
	public SocketServer(ServerConfig config){
		super(config);
		logger.info("RPCServer created at port " + config.getPort());
	}
	
	public boolean start(){
		ifRun = true;
		new Thread(new Runnable() {
			public void run() {
				loop();				
			}
		}).start();
		return true;
	}
	
	public boolean stop(){
		ifRun = false;
		return true;
	}
	
	public boolean run(){
		if(!check()){
			logger.error(errBegin + "check fail");
			return false;
		}
		return start();
	}
	
	public void loop() {
		ServerSocket serverSocket;
		try {
			serverSocket = new ServerSocket(config.getPort());
		} catch (IOException e) {
			logger.error(errBegin + e.getMessage());
			stop();
			return;
		}
		logger.info("RPCServer start at port " + config.getPort());
		while(ifRun){
			try {
				Socket socket = serverSocket.accept();
				Post.getInstance().process(new SocketThread(socket,serviceInstances));
			} catch (IOException e) {
				logger.error(e.getMessage());
			}
		}
		logger.info("RPCServer stop at port " + config.getPort());
		try {
			serverSocket.close();
		} catch (IOException e) {
			logger.error("close server socket fail:" + e.getMessage());
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy