Established a connection between the Interface and the browser.

All we're doing right now is pinging, but it should be fairly simple to get an API working now that the browser and interface can talk.
This commit is contained in:
Markil3
2021-07-29 11:37:07 -07:00
parent 1321549ef3
commit 105c89b615
25 changed files with 1236 additions and 118 deletions

View File

@@ -27,15 +27,15 @@ import java.util.HashMap;
*/
public class BrowserLink extends MessageRunner
{
private static final Logger logger = LoggerFactory.getLogger(BrowserLink.class);
// private static final Logger logger = LoggerFactory.getLogger(BrowserLink.class);
public static final Gson gson = new Gson();
/**
* Creates a message runner.
*/
public BrowserLink()
public BrowserLink(String name)
{
super(System.in, System.out);
super(name, System.in, System.out);
}
@Override
@@ -64,7 +64,7 @@ public class BrowserLink extends MessageRunner
ByteBuffer lengthBuffer = ByteBuffer.allocate(4);
lengthBuffer.order(ByteOrder.nativeOrder());
logger.debug("Writing message {} {}", messageNum, messageString);
getLogger().debug("Writing message {} {}", messageNum, messageString);
/*
* Writes the message length
*/
@@ -92,7 +92,7 @@ public class BrowserLink extends MessageRunner
readLength = in.read(lengthBuffer.array());
if (readLength == 0)
{
logger.debug("Input stream closed, no more messages.");
getLogger().debug("Input stream closed, no more messages.");
return null;
}
messageLength = lengthBuffer.getInt();
@@ -101,7 +101,7 @@ public class BrowserLink extends MessageRunner
readLength = in.read(message);
if (readLength < message.length)
{
logger.warn("Message shorter than reported (expected {} bytes, got {} bytes)", message.length, readLength);
getLogger().warn("Message shorter than reported (expected {} bytes, got {} bytes)", message.length, readLength);
}
messageJson = gson.fromJson(new String(message, StandardCharsets.UTF_8), JsonObject.class);
messageNum = messageJson.get("messageNum").getAsInt();
@@ -115,7 +115,7 @@ public class BrowserLink extends MessageRunner
lengthBuffer.put(new byte[4]);
lengthBuffer.clear();
lengthBuffer.putInt(messageNum);
logger.debug("Reading message {}", messageNum);
getLogger().debug("Reading message {}", messageNum);
return new byte[][] {lengthBuffer.array(), message};
}
@@ -200,7 +200,7 @@ public class BrowserLink extends MessageRunner
}
catch (ClassNotFoundException | ClassCastException e)
{
logger.error("Illegal class type " + message.get("type"), e);
getLogger().error("Illegal class type " + message.get("type"), e);
}
}
@@ -221,7 +221,7 @@ public class BrowserLink extends MessageRunner
}
catch (IOException e)
{
logger.error("Could not parse message entry " + entry.getKey() + " (" + entry.getValue() + ")", e);
getLogger().error("Could not parse message entry " + entry.getKey() + " (" + entry.getValue() + ")", e);
}
});
return type;

View File

@@ -4,10 +4,14 @@
package edu.regis.universeplayer.addon;
import edu.regis.universeplayer.browserCommands.BrowserConstants;
import edu.regis.universeplayer.browserCommands.MessageHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.LinkedList;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@@ -16,10 +20,91 @@ public class Main
{
private static final Logger logger = LoggerFactory.getLogger(Main.class);
public static void main(String[] args) throws ExecutionException, InterruptedException
public static void main(String[] args) throws IOException, InterruptedException
{
ServerSocket socketSource = null;
Socket socket = null;
MessageHandler interfaceLink;
BrowserLink browserLink;
Thread interfaceThread, browserThread;
try
{
try
{
logger.debug("Connecting to browser");
browserLink = new BrowserLink("BrowserLink");
logger.debug("Setting up server");
socketSource = new ServerSocket(BrowserConstants.PORT);
logger.debug("Server started");
socket = socketSource.accept();
logger.debug("Connection received");
interfaceLink = new MessageHandler("InterfaceHandler", socket.getInputStream(), socket.getOutputStream());
/*
* Pretty much just forwards any messages to the browser and
* returns their value.
*/
interfaceLink.addListener((providedValue, previousReturn) -> {
logger.debug("Forwarding message to browser: {}", providedValue);
Object returnValue = browserLink.sendObject(providedValue).get();
logger.debug("Forwarding return to interface: {}", returnValue);
return returnValue;
});
browserThread = new Thread(browserLink);
interfaceThread = new Thread(interfaceLink);
logger.debug("Starting threads.");
browserThread.start();
interfaceThread.start();
logger.debug("Joining threads.");
browserThread.join();
interfaceThread.join();
logger.debug("Threads completed.");
}
catch (IOException e)
{
logger.error("Could not initialize socket", e);
throw e;
}
}
catch (Throwable e)
{
logger.error("ERROR", e);
throw e;
}
finally
{
logger.debug("Shutting down interface link");
if (socket != null)
{
try
{
socket.close();
}
catch (IOException e)
{
logger.error("Could not close socket", e);
}
finally
{
logger.debug("Shutting down server");
try
{
socketSource.close();
}
catch (IOException e)
{
logger.error("Could not close server", e);
}
}
}
}
}
private static void testMain() throws ExecutionException, InterruptedException
{
LinkedList<Future<Object>> requests = new LinkedList<>();
BrowserLink link = new BrowserLink();
BrowserLink link = new BrowserLink("BrowserLink");
Thread linkThread = new Thread(link);
linkThread.start();
logger.info("Sending message");