Ensures that we close all sockets and socket servers before exiting.

This makes the program more stable, and ensures that the connection is established every time we start.
This commit is contained in:
Markil3
2021-08-23 08:31:27 -06:00
parent 9c2cea1662
commit b35e2eefd8
6 changed files with 119 additions and 30 deletions

View File

@@ -19,12 +19,12 @@ public class Main
{
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) throws IOException, InterruptedException
public static void main(String[] args) throws IOException
{
MessageHandler interfaceLink;
BrowserLink browserLink;
Thread interfaceThread, browserThread;
Socket socket;
Socket socket = null;
try
{
logger.debug("Connecting to browser");
@@ -34,18 +34,38 @@ public class Main
logger.debug("Setting up connection");
socket = new Socket(BrowserConstants.IP,BrowserConstants.PORT);
logger.debug("Connection established");
interfaceLink = new MessageHandler("InterfaceHandler", socket.getInputStream(), socket.getOutputStream()) {
Socket finalSocket = socket;
interfaceLink = new MessageHandler("InterfaceHandler", finalSocket.getInputStream(), finalSocket.getOutputStream()) {
@Override
protected boolean onRun()
{
if (!socket.isConnected() || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown())
if (!finalSocket.isConnected() || finalSocket.isClosed() || finalSocket.isInputShutdown() || finalSocket.isOutputShutdown())
{
logger.debug("Socket closed, shutting down");
logger.debug("Interface socket closed, shutting down");
return true;
}
/**
* Make sure that it is active.
*/
this.sendUpdate("ping");
return false;
}
@Override
protected void onClose()
{
try
{
logger.debug("Closing interface socket.");
finalSocket.close();
browserLink.sendObject("quit");
}
catch (IOException e)
{
logger.error("Could not close socket", e);
}
}
};
logger.debug("Connection received");
/*
@@ -70,14 +90,28 @@ public class Main
browserThread.start();
interfaceThread.start();
logger.debug("Joining threads.");
browserThread.join();
interfaceThread.join();
try
{
browserThread.join();
interfaceThread.join();
}
catch (InterruptedException e)
{
logger.error("Could not wait for threads", e);
}
logger.debug("Threads completed.");
}
catch (IOException e)
{
logger.error("Could not initialize socket", e);
browserLink.sendObject("quit");
try
{
browserLink.sendObject("quit");
}
catch (IOException ex)
{
logger.error("Could not quit socket", ex);
}
throw e;
}
}
@@ -89,6 +123,17 @@ public class Main
finally
{
logger.debug("Shutting down interface link");
if (socket != null)
{
try
{
socket.close();
}
catch (IOException e)
{
logger.error("Could not close socket", e);
}
}
}
}

View File

@@ -17,10 +17,5 @@
<Root level="debug">
<AppenderRef ref="File"/>
</Root>
<Logger name="edu.regis.universeplayer.browserCommands.MessageRunner" level="trace"/>
<Logger name="edu.regis.universeplayer.browserCommands.MessageHandler" level="trace"/>
<Logger name="edu.regis.universeplayer.browserCommands.memoryMapping.MemoryRunner" level="trace"/>
<Logger name="edu.regis.universeplayer.browserCommands.memoryMapping.MemoryHandler" level="trace"/>
<Logger name="BrowserLink" level="trace"/>
</Loggers>
</Configuration>