Merge pull request #29 from jTendermint/Issue-27

Issue 27
This commit is contained in:
Wolf 2017-12-01 10:52:23 +01:00 committed by GitHub
commit 19d3f573e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -28,6 +28,7 @@ import java.io.IOException;
import java.math.BigInteger; import java.math.BigInteger;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.net.Socket; import java.net.Socket;
import java.net.SocketTimeoutException;
import java.util.HashSet; import java.util.HashSet;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -48,6 +49,7 @@ import com.google.protobuf.GeneratedMessageV3;
public class TSocket extends ASocket { public class TSocket extends ASocket {
public static final int DEFAULT_LISTEN_SOCKET_PORT = 46658; public static final int DEFAULT_LISTEN_SOCKET_PORT = 46658;
private static final int DEFAULT_LISTEN_SOCKET_TIMEOUT = 1000;
private static final Logger TSOCKET_LOG = LoggerFactory.getLogger(TSocket.class); private static final Logger TSOCKET_LOG = LoggerFactory.getLogger(TSocket.class);
private static final Logger HANDLER_LOG = LoggerFactory.getLogger(SocketHandler.class); private static final Logger HANDLER_LOG = LoggerFactory.getLogger(SocketHandler.class);
@ -65,7 +67,7 @@ public class TSocket extends ASocket {
* Start listening on the default ABCI port 46658 * Start listening on the default ABCI port 46658
*/ */
public void start() { public void start() {
this.start(DEFAULT_LISTEN_SOCKET_PORT); this.start(DEFAULT_LISTEN_SOCKET_PORT, DEFAULT_LISTEN_SOCKET_TIMEOUT);
} }
/** /**
@ -73,12 +75,24 @@ public class TSocket extends ASocket {
* *
* @param portNumber * @param portNumber
*/ */
public void start(int portNumber) { public void start(final int portNumber) {
this.start(portNumber, DEFAULT_LISTEN_SOCKET_TIMEOUT);
}
/**
* Start listening on the specified port
*
* @param portNumber
* @param socketTimeout
*/
public void start(final int portNumber,final int socketTimeout) {
TSOCKET_LOG.debug("starting serversocket"); TSOCKET_LOG.debug("starting serversocket");
continueRunning = true; continueRunning = true;
int socketcount = 0; int socketcount = 0;
try (ServerSocket serverSocket = new ServerSocket(portNumber)) { try (ServerSocket serverSocket = new ServerSocket(portNumber)) {
serverSocket.setSoTimeout(socketTimeout);
while (continueRunning) { while (continueRunning) {
try {
Socket clientSocket = serverSocket.accept(); Socket clientSocket = serverSocket.accept();
lastConnectedSocketTime = System.currentTimeMillis(); lastConnectedSocketTime = System.currentTimeMillis();
String socketName = socketNameForCount(++socketcount); String socketName = socketNameForCount(++socketcount);
@ -87,11 +101,15 @@ public class TSocket extends ASocket {
t.start(); t.start();
runningThreads.add(t); runningThreads.add(t);
TSOCKET_LOG.debug("Started thread for sockethandling..."); TSOCKET_LOG.debug("Started thread for sockethandling...");
} catch (SocketTimeoutException ste) {
// this is triggered by accept()
}
} }
TSOCKET_LOG.debug("TSocket Stopped Running"); TSOCKET_LOG.debug("TSocket Stopped Running");
} catch (IOException e) { } catch (IOException e) {
TSOCKET_LOG.error("Exception caught when trying to listen on port " + portNumber + " or listening for a connection", e); TSOCKET_LOG.error("Exception caught when trying to listen on port " + portNumber + " or listening for a connection", e);
} }
TSOCKET_LOG.debug("Exited main-run-while loop");
} }
private String socketNameForCount(int c) { private String socketNameForCount(int c) {
@ -124,6 +142,7 @@ public class TSocket extends ASocket {
runningThreads.clear(); runningThreads.clear();
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
TSOCKET_LOG.debug("Finished calling stop on members.");
} }
/** /**
* @return the amount of connected sockets, this should usually be 3: info,mempool and consensus * @return the amount of connected sockets, this should usually be 3: info,mempool and consensus