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:
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user