package com.dounine.corgi.rpc.listen; import com.dounine.corgi.rpc.protocol.IProtocol; import com.dounine.corgi.rpc.serialize.rmi.RpcServer; import com.dounine.corgi.rpc.utils.ThreadPools; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.CountDownLatch; /** * Created by huanghuanlai on 2016/10/15. */ public class RpcContainer implements Runnable { public static final CountDownLatch RPC_LISTENERED = new CountDownLatch(1); private static final Logger LOGGER = LoggerFactory.getLogger(RpcContainer.class); private static boolean isListener = false; private IProtocol protocol; public RpcContainer(final IProtocol protocol){ this.protocol = protocol; } @Override public void run() { Socket socket = null; try { ServerSocket serverSocket = new ServerSocket(protocol.getPort()); LOGGER.info("CORGI rpc provider port [ "+protocol.getPort()+" ] started."); LOGGER.info("CORGI rpc connect watching..."); RPC_LISTENERED.countDown(); isListener = true; for(;;){ socket = serverSocket.accept(); // socket.setSoTimeout(RPC_SOCKET_TIMEOUT); LOGGER.info("CORGI [ "+socket.getRemoteSocketAddress()+" ] client connected."); ThreadPools.getExecutor().execute(new RpcServer(socket)); } } catch (IOException e) { e.printStackTrace(); } } public static void waitRpcListener(){ try { RPC_LISTENERED.await(); } catch (InterruptedException e) { e.printStackTrace(); } } public static boolean isListener(){ return isListener; } }