From f294a5aa9051e04e1bd3981b4728a6257464526a Mon Sep 17 00:00:00 2001 From: Conor Flynn Date: Sun, 11 Sep 2022 23:22:35 -0400 Subject: [PATCH 1/3] Successful RQST call implementation through REST API. --- .../Internal Manual/Packet Spreadsheet.xlsx | Bin 16379 -> 16601 bytes .../DeFi Data Engine/config/app.properties | 4 + .../java/org/framework/router/Packet.java | 30 +++++- .../org/framework/router/ResponseFactory.java | 16 ++- .../java/org/framework/router/Router.java | 15 ++- .../org/out/consumers/SocketConsumer.java | 22 +++- .../java/org/out/handler/OutputConsumer.java | 4 + .../java/org/out/handler/OutputHandler.java | 10 +- .../java/org/out/handler/OutputManager.java | 8 ++ .../connections/AmberDataConnection.java | 2 +- .../connections/TemplateConnection.java | 17 +++- .../handler/ExternalStreamConnection.java | 6 +- .../handler/ExternalStreamHandler.java | 7 +- .../handler/ExternalStreamManager.java | 9 +- .../registry/StreamRegistryController.java | 21 ++-- .../Rest Application/config/app.properties | 16 +-- .../java/org/rest/application/Endpoint.java | 31 ++++-- .../socket/SocketConnectionTest.java | 94 ++++++++++++++++-- 18 files changed, 259 insertions(+), 53 deletions(-) diff --git a/Data Engine/Documents/Internal Manual/Packet Spreadsheet.xlsx b/Data Engine/Documents/Internal Manual/Packet Spreadsheet.xlsx index 75d609e4d6db1c4467b995796dd2d6d7439674d4..32e084ea235992413f9c3b0d6e26b8ad6dd28753 100644 GIT binary patch delta 7881 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 delta 7656 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 S9KKKpRxe453={ot?7sj>h)E;> diff --git a/DeFi-Data-Engine/DeFi Data Engine/config/app.properties b/DeFi-Data-Engine/DeFi Data Engine/config/app.properties index e69de29b..09935a87 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/config/app.properties +++ b/DeFi-Data-Engine/DeFi Data Engine/config/app.properties @@ -0,0 +1,4 @@ +# === GENERAL PROPERTIES === + +# delimiter used for internal processing +general.internal.delim=,., \ No newline at end of file diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/Packet.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/Packet.java index 42807297..59bde8d1 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/Packet.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/Packet.java @@ -15,6 +15,7 @@ public class Packet { private final String tag; private final String sub_tag; private final String data; + private final String sub_data; /** * Initializes a new {@link Packet} object. @@ -23,12 +24,14 @@ public class Packet { * @param tag Tag of the destination the {@link Packet} will be sent to. * @param sub_tag Sub tag describing the action performed at the destination. * @param data Data transmitted through the {@link Packet} for processing at the destination. + * @param sub_data Supporting data used for processing and transmitting from {@code data}. This parameter is optional. */ - private Packet(Router router, String tag, String sub_tag, String data) { + private Packet(Router router, String tag, String sub_tag, String data, String sub_data) { this.sender = router.getTag(); this.tag = tag; this.sub_tag = sub_tag; this.data = data; + this.sub_data = sub_data; } /** @@ -67,6 +70,15 @@ public final String getData() { return data; } + /** + * Supporting data used for processing and transmitting from {@code data}. + * + * @return String containing all sub_data. + */ + public final String getSubData() { + return sub_data; + } + /** * Factory method used to create a {@link Packet} object. * @@ -77,6 +89,20 @@ public final String getData() { * @return New {@link Packet} object. */ public static Packet packet(Router router, String tag, String sub_tag, String data) { - return new Packet(router, tag, sub_tag, data); + return new Packet(router, tag, sub_tag, data, ""); + } + + /** + * Factory method used to create a {@link Packet} object. + * + * @param router {@link Router} object the {@link Packet} was sent from. + * @param tag Tag of the destination the {@link Packet} will be sent to. + * @param sub_tag Sub tag describing the action performed at the destination. + * @param data Data transmitted through the {@link Packet} for processing at the destination. + * @param sub_data Supporting data used for processing and transmitting from {@code data}. + * @return New {@link Packet} object. + */ + public static Packet packet(Router router, String tag, String sub_tag, String data, String sub_data) { + return new Packet(router, tag, sub_tag, data, sub_data); } } \ No newline at end of file diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java index 601e7932..79bd17bc 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/ResponseFactory.java @@ -88,8 +88,16 @@ public static Response response460(String consumer) { return Response.create(460, String.format("Output consumer <%s> failed to listen to consumption channel.", consumer)); } - public static Response response470(String consumer) { - return Response.create(470, String.format("Output producer <%s> failed to listen to production channel.", consumer)); + public static Response response470(String producer) { + return Response.create(470, String.format("Output producer <%s> failed to listen to production channel.", producer)); + } + + public static Response response471(String key) { + return Response.create(471, String.format("Output manager does not contain destination with key <%s>", key)); + } + + public static Response response472(String key) { + return Response.create(472, String.format("Output producer <%s> failed to send data to external connection <%s>.", key)); } public static Response response500(String loc, String parameter) { @@ -99,4 +107,8 @@ public static Response response500(String loc, String parameter) { public static Response response501() { return Response.create(501, String.format("Fatal error occurred. This response should not be displayed.")); } + + public static Response response502() { + return Response.create(502, String.format("Internal language failure. This error is commonly causes by a static protocol being treated as a live protocol or vice versa.")); + } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/Router.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/Router.java index 577fe09b..e440021c 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/Router.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/framework/router/Router.java @@ -172,11 +172,24 @@ protected final Collection connectedTags() { * @return Integer representing the return code of the sent {@link Packet}. */ public final Response send(String tag, String sub_tag, String data) { + return send(tag, sub_tag, data, ""); + } + + /** + * Function used to send a {@link Packet} object to the desired destination. + * + * @param tag Tag Tag of the destination's {@link Router} object. + * @param sub_tag Sub tag describing the action performed at the destination. + * @param data Data transmitted through the {@link Packet} for processing at the destination. + * @param sub_data Supporting data used for processing and transmitting from {@code data}. This parameter is optional. + * @return Integer representing the return code of the sent {@link Packet}. + */ + public final Response send(String tag, String sub_tag, String data, String sub_data) { if(manager == null) return ResponseFactory.response400(this.getTag()); // create packet and push to receive method - Packet packet = Packet.packet(this, tag, sub_tag, data); + Packet packet = Packet.packet(this, tag, sub_tag, data, sub_data); return manager.send(packet); } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java index 16982fe0..95e00451 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/consumers/SocketConsumer.java @@ -46,15 +46,31 @@ public void run() { // listen for data packets from rest socket while(true) { - String[] data = ((String)in.readUTF()).split(",.,"); - String[] protocol = ProtocolDirectory.getProtocol(data[1]); + String[] data = ((String)in.readUTF()).split(Config.getProperty("app", "general.internal.delim")); + int protocol_index = 0, data_index = 0; + if(data.length == 2) { + protocol_index = 0; + data_index = 1; + } + + else if(data.length == 3) { + protocol_index = 1; + data_index = 2; + } + + else { + System.err.println("Invalid data format for SocketConsumer. Terminating."); + System.exit(1); + } + + String[] protocol = ProtocolDirectory.getProtocol(data[protocol_index]); if(protocol == null) { out.writeUTF(new JSONObject() .put("response", "403") .put("message", "Protocol does not exist. Please reference documentation.") .toString()); } else { - Response response = send(protocol[0], protocol[1], data[2]); + Response response = send(protocol[0], protocol[1], data[data_index], data[0]); out.writeUTF(new JSONObject() .put("response", "200") .put("code", response.code()) diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputConsumer.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputConsumer.java index 13813a6f..a3e89d25 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputConsumer.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputConsumer.java @@ -15,6 +15,10 @@ protected final Response send(String tag, String sub_tag, String data) { return manager.send(tag, sub_tag, data); } + protected final Response send(String tag, String sub_tag, String data, String sub_data) { + return manager.send(tag, sub_tag, data, sub_data); + } + protected abstract boolean init(); protected abstract boolean listen(); protected abstract boolean kill(); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java index 84112145..45d9e25e 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java @@ -37,6 +37,14 @@ public Response processSTRT(Packet packet) { public Response processEDAT(Packet packet) { System.out.println(packet.getData()); - return ResponseFactory.response0(); + System.out.println(packet.getSubData()); + + if(!manager.containsDestination(packet.getSubData())) + return ResponseFactory.response471(packet.getSubData()); + + if(!manager.send(packet.getSubData(), packet)) + return ResponseFactory.response472(packet.getSubData()); + + return ResponseFactory.response200(""); } } \ No newline at end of file diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputManager.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputManager.java index 51ab782b..4e60e972 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputManager.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputManager.java @@ -115,6 +115,10 @@ protected final Response send(String tag, String sub_tag, String data) { return handler.send(tag, sub_tag, data); } + protected final Response send(String tag, String sub_tag, String data, String sub_data) { + return handler.send(tag, sub_tag, data, sub_data); + } + public final synchronized void add(OutputDestination destination) { destinations.put(destination.getKey(), destination); destination.send(Packet.packet(handler, "", "", "Connected: " + destination.getKey())); @@ -124,6 +128,10 @@ public final synchronized void remove(String key) { destinations.remove(key); } + public final boolean containsDestination(String key) { + return destinations.containsKey(key); + } + public final boolean send(String key, Packet packet) { if(!destinations.containsKey(key)) return false; diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java index 9acab9b2..3190d837 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/AmberDataConnection.java @@ -116,7 +116,7 @@ public boolean stop() { } @Override - public Object[] request(String data) { + public Object[] request(String destination, String data) { return AmberDataRequestHandler.request(this.data, data); } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateConnection.java index dd205778..ce1f0fe2 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/connected/connections/TemplateConnection.java @@ -42,12 +42,14 @@ public boolean isAuthorized() { public void defineSubscriptionTypes() { addSubscriptionType("correct"); addSubscriptionType("irregular"); + addSubscriptionType("external"); } @Override public void defineRequestTypes() { addRequestType("correct"); addRequestType("irregular"); + addRequestType("external"); } @Override @@ -83,10 +85,19 @@ public boolean stop() { } @Override - public Object[] request(String data) { + public Object[] request(String destination, String data) { if(data.equals("correct")) return new Object[] {true, "Successful request"}; - else - return new Object[] {false, "Request handled irregularly"}; + + else if(data.equals("external")) { + // submit 10 packets of data to external destination + for(int i = 0; i < 10; i++) { + this.process("test", destination, "" + i); + } + + return new Object[] {true, "Successful request"}; + } + + return new Object[] {false, "Request handled irregularly"}; } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java index 8b12e2b8..a0862b9d 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamConnection.java @@ -31,8 +31,8 @@ public void init() { } - public void process(String subscription, String data) { - manager.process(hash, subscription, data); + public void process(String subscription, String destination, String data) { + manager.process(hash, subscription, destination, data); } public final String getHash() { @@ -52,7 +52,7 @@ public final String getHash() { public abstract void defineRequestTypes(); public final void addRequestType(String type) { requestTypes.add(type); } public final boolean containsRequestType(String type) { return requestTypes.contains(type); } - public abstract Object[] request(String request); + public abstract Object[] request(String destination, String request); public abstract boolean start(); public abstract boolean stop(); diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java index 40a92fbc..af654361 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamHandler.java @@ -154,6 +154,9 @@ public Response processRQST(Packet packet) { if(packet.getData().equals("")) return ResponseFactory.response500("ExternalStreamHandler", "streamHash"); + if(packet.getSubData().equals("")) + return ResponseFactory.response500("ExternalStreamHandler", "destination"); + // extract hash from data String request = packet.getData(); int splitIndex = request.indexOf(','); @@ -174,11 +177,11 @@ public Response processRQST(Packet packet) { if(!manager.containsRequestType(hash, request)) return ResponseFactory.response428(hash, request); - Object[] response = manager.request(hash, request); + Object[] response = manager.request(hash, packet.getSubData(), request); if((Boolean)response[0]) return Response.create(200, "", String.format("%s", (String)response[1])); return ResponseFactory.response429(hash, request, (String)response[1]); } -} +} \ No newline at end of file diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java index eda2d943..cf760776 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/external/handler/ExternalStreamManager.java @@ -290,10 +290,11 @@ protected boolean containsRequestType(String hash, String type) { * If a stream with the given hash does not exist, this function returns false. * * @param hash Hash of the stream returned by the {@link ExternalStreamConnection#getHash(String)} function. + * @param destination Destination of the request to be processed by the {@link ExternalStreamManager#process(String, String, String)} function. * @param request Request data used for processing the single request. * @return Returns a string object containing all data returned by the request. */ - protected Object[] request(String hash, String request) { + protected Object[] request(String hash, String destination, String request) { if(!streams.containsKey(hash)) return new Object[] {false, null}; @@ -301,7 +302,7 @@ protected Object[] request(String hash, String request) { if(!stream.isAuthorized() || !stream.isReady()) return new Object[] {false, null}; - return stream.request(request); + return stream.request(destination, request); } /** @@ -355,7 +356,7 @@ protected boolean killStream(String hash) { * @param subscription Subscription which the data was received by. * @param data Data sent by the given subscription. */ - protected void process(String hash, String subscription, String data) { - handler.send("SRC", "EDAT", String.format("%s, %s, %s", hash, subscription, data)); + protected void process(String hash, String subscription, String destination, String data) { + handler.send("OUT", "EDAT", String.format("%s, %s, %s", hash, subscription, data), destination); } } diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java index cec851ed..18df1eab 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/stream/registry/StreamRegistryController.java @@ -2,7 +2,6 @@ import org.framework.router.Packet; import org.framework.router.Response; -import org.framework.router.ResponseFactory; import org.framework.router.Router; public class StreamRegistryController extends Router { @@ -12,42 +11,42 @@ public StreamRegistryController() { } public Response processEXSR(Packet packet) { - return send("ESH", "EXSR", packet.getData()); + return send("ESH", "EXSR", packet.getData(), packet.getSubData()); } public Response processEXST(Packet packet) { - return send("ESH", "EXST", packet.getData()); + return send("ESH", "EXST", packet.getData(), packet.getSubData()); } public Response processINIT(Packet packet) { - return send("ESH", "INIT", packet.getData()); + return send("ESH", "INIT", packet.getData(), packet.getSubData()); } public Response processIATH(Packet packet) { - return send("ESH", "IATH", packet.getData()); + return send("ESH", "IATH", packet.getData(), packet.getSubData()); } public Response processIATV(Packet packet) { - return send("ESH", "IATV", packet.getData()); + return send("ESH", "IATV", packet.getData(), packet.getSubData()); } public Response processEXEC(Packet packet) { - return send("ESH", "EXEC", packet.getData()); + return send("ESH", "EXEC", packet.getData(), packet.getSubData()); } public Response processKILL(Packet packet) { - return send("ESH", "KILL", packet.getData()); + return send("ESH", "KILL", packet.getData(), packet.getSubData()); } public Response processSUBS(Packet packet) { - return send("ESH", "SUBS", packet.getData()); + return send("ESH", "SUBS", packet.getData(), packet.getSubData()); } public Response processEDAT(Packet packet) { - return ResponseFactory.response0(); + return send("OUT", "EDAT", packet.getData(), packet.getSubData()); } public Response processRQST(Packet packet) { - return send("ESH", "RQST", packet.getData()); + return send("ESH", "RQST", packet.getData(), packet.getSubData()); } } \ No newline at end of file diff --git a/DeFi-Data-Engine/Rest Application/config/app.properties b/DeFi-Data-Engine/Rest Application/config/app.properties index 76f7d95e..526cb9b7 100644 --- a/DeFi-Data-Engine/Rest Application/config/app.properties +++ b/DeFi-Data-Engine/Rest Application/config/app.properties @@ -1,3 +1,11 @@ +# === GENERAL PROPERTIES === + +# Wait-time in between checking for responses from engine: +rest.wait.ms=10 + +# Delimiter used for communication between engine and API: +general.internal.delim=,., + # === SPRING PROPERTIES === # Port of Tomcat server @@ -12,10 +20,4 @@ rest.socket.address=localhost rest.socket.port=61100 # Rest socket key -rest.socket.key=rest-key-reserved - - -# === MISC PROPERTIES === - -# Wait-time in between checking for responses from engine: -rest.wait.ms=10 \ No newline at end of file +rest.socket.key=rest-key-reserved \ No newline at end of file diff --git a/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java b/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java index f487996b..4e59fa31 100644 --- a/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java +++ b/DeFi-Data-Engine/Rest Application/src/main/java/org/rest/application/Endpoint.java @@ -35,9 +35,9 @@ public class Endpoint { } } - // sample testing url: http://localhost:8080/defi/v1/rest/json?key=t1&protocol=t2&data=t3 - @GetMapping(path="/defi/v1/rest/json") - public String getRest(@RequestParam String key, @RequestParam String protocol, @RequestParam String data) throws InterruptedException { + // sample testing url: http://localhost:8080/defi/v1/rest/live?key=TEST-KEY&protocol=request&data=key,external + @GetMapping(path="/defi/v1/rest/live") + public String getRestLive(@RequestParam String key, @RequestParam String protocol, @RequestParam String data) throws InterruptedException { String response = request(key, protocol, data); if(response == null) return new JSONObject() @@ -48,14 +48,33 @@ public String getRest(@RequestParam String key, @RequestParam String protocol, @ return response; } + @GetMapping(path="/defi/v1/rest/static") + public String getRestStatic(@RequestParam String protocol, @RequestParam String data) throws InterruptedException { + String response = request("", protocol, data); + if(response == null) + return new JSONObject() + .put("response", "500") + .put("message", "Unexpected invalid request. Cannot process given response.") + .toString(); + + return response; + } + private final synchronized String request(String key, String protocol, String data) { try { - if(key.contains(",.,") || protocol.contains(",.,") || data.contains(",.,")) + String delim = Config.getProperty("app", "general.internal.delim"); + if(key.contains(delim) || protocol.contains(delim) || data.contains(delim)) return new JSONObject() .put("response", "406") - .put("message", "Parameters cannot contain the character sequence <,.,>. Please request with a different character.") + .put("message", String.format("Parameters cannot contain the character sequence <%s>. Please request with a different character.", delim)) .toString(); - out.writeUTF(String.format("%s,.,%s,.,%s", key, protocol, data)); + + // static request + if(key.equals("")) + out.writeUTF(String.format("%s%s%s", protocol, delim, data)); + // live request + else + out.writeUTF(String.format("%s%s%s%s%s", key, delim, protocol, delim, data)); return in.readUTF(); } catch (IOException e) { e.printStackTrace(); diff --git a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java index 106fb735..06a38222 100644 --- a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java +++ b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java @@ -1,24 +1,104 @@ package test.connection.socket; +import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; import java.net.Socket; +import java.net.URL; +import java.net.URLEncoder; import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Map; import javax.net.SocketFactory; public class SocketConnectionTest { public static void main(String[] args) throws UnknownHostException, IOException { - Socket socket = SocketFactory.getDefault().createSocket("localhost", 61200); - DataInputStream in = new DataInputStream(socket.getInputStream()); - DataOutputStream out = new DataOutputStream(socket.getOutputStream()); - - out.writeUTF("TEST-KEY"); + Thread thread = new Thread() { + public void run() { + try { + Socket socket = SocketFactory.getDefault().createSocket("localhost", 61200); + DataInputStream in = new DataInputStream(socket.getInputStream()); + DataOutputStream out = new DataOutputStream(socket.getOutputStream()); + + out.writeUTF("TEST-KEY"); + + while(true) { + System.out.println(in.readUTF()); + } + } catch(Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + }; + thread.start(); + + System.out.println(request("http://localhost:8080/defi/v1/rest/static?protocol=initialize&data=external_template,key")); + System.out.println(request("http://localhost:8080/defi/v1/rest/live?key=TEST-KEY&protocol=request&data=key,external")); + } + + public static String request(String str, String... params) throws IOException { +// URL url = new URL(str); +// HttpURLConnection con = (HttpURLConnection)url.openConnection(); +// con.setRequestMethod("GET"); +// +// Map parameters = new HashMap<>(); +// for(int i = 0; i < params.length; i+=2) +// parameters.put(params[i], params[i + 1]); +// +// con.setDoOutput(true); +// DataOutputStream out = new DataOutputStream(con.getOutputStream()); +// out.writeBytes(ParameterStringBuilder.getParamsString(parameters)); +// +// System.out.println(con.getResponseCode()); +// return con.getResponseMessage(); - while(true) { - System.out.println(in.readUTF()); + URL obj = new URL(str); + HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + con.setRequestMethod("GET"); + int responseCode = con.getResponseCode(); + System.out.println("GET Response Code :: " + responseCode); + if (responseCode == HttpURLConnection.HTTP_OK) { // success + BufferedReader in = new BufferedReader(new InputStreamReader( + con.getInputStream())); + String inputLine; + StringBuffer response = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + in.close(); + + // print result + System.out.println(response.toString()); + } else { + System.out.println("GET request not worked"); } + return ""; } } + +class ParameterStringBuilder { + public static String getParamsString(Map params) + throws UnsupportedEncodingException{ + StringBuilder result = new StringBuilder(); + + for (Map.Entry entry : params.entrySet()) { + result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); + result.append("="); + result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); + result.append("&"); + } + + String resultString = result.toString(); + return resultString.length() > 0 + ? resultString.substring(0, resultString.length() - 1) + : resultString; + } +} \ No newline at end of file From 81b571467ef83844d7adad8f9362ee42c82ac6db Mon Sep 17 00:00:00 2001 From: Conor Flynn Date: Sun, 11 Sep 2022 23:26:27 -0400 Subject: [PATCH 2/3] Reformat testing case for SocketConnectionTest.java. --- .../socket/SocketConnectionTest.java | 47 ++----------------- 1 file changed, 3 insertions(+), 44 deletions(-) diff --git a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java index 06a38222..d864e816 100644 --- a/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java +++ b/DeFi-Data-Engine/Testing Environment/src/test/connection/socket/SocketConnectionTest.java @@ -5,15 +5,10 @@ import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.Socket; import java.net.URL; -import java.net.URLEncoder; import java.net.UnknownHostException; -import java.util.HashMap; -import java.util.Map; - import javax.net.SocketFactory; public class SocketConnectionTest { @@ -39,31 +34,15 @@ public void run() { }; thread.start(); - System.out.println(request("http://localhost:8080/defi/v1/rest/static?protocol=initialize&data=external_template,key")); - System.out.println(request("http://localhost:8080/defi/v1/rest/live?key=TEST-KEY&protocol=request&data=key,external")); + System.out.println("INIT RESPONSE: " + request("http://localhost:8080/defi/v1/rest/static?protocol=initialize&data=external_template,key")); + System.out.println("RQST RESPONSE: " + request("http://localhost:8080/defi/v1/rest/live?key=TEST-KEY&protocol=request&data=key,external")); } public static String request(String str, String... params) throws IOException { -// URL url = new URL(str); -// HttpURLConnection con = (HttpURLConnection)url.openConnection(); -// con.setRequestMethod("GET"); -// -// Map parameters = new HashMap<>(); -// for(int i = 0; i < params.length; i+=2) -// parameters.put(params[i], params[i + 1]); -// -// con.setDoOutput(true); -// DataOutputStream out = new DataOutputStream(con.getOutputStream()); -// out.writeBytes(ParameterStringBuilder.getParamsString(parameters)); -// -// System.out.println(con.getResponseCode()); -// return con.getResponseMessage(); - URL obj = new URL(str); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); int responseCode = con.getResponseCode(); - System.out.println("GET Response Code :: " + responseCode); if (responseCode == HttpURLConnection.HTTP_OK) { // success BufferedReader in = new BufferedReader(new InputStreamReader( con.getInputStream())); @@ -75,30 +54,10 @@ public static String request(String str, String... params) throws IOException { } in.close(); - // print result - System.out.println(response.toString()); + return response.toString(); } else { System.out.println("GET request not worked"); } return ""; } -} - -class ParameterStringBuilder { - public static String getParamsString(Map params) - throws UnsupportedEncodingException{ - StringBuilder result = new StringBuilder(); - - for (Map.Entry entry : params.entrySet()) { - result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); - result.append("="); - result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); - result.append("&"); - } - - String resultString = result.toString(); - return resultString.length() > 0 - ? resultString.substring(0, resultString.length() - 1) - : resultString; - } } \ No newline at end of file From cb1214aba7557570a2a55f4ae1f7eef20dbfc5b0 Mon Sep 17 00:00:00 2001 From: Conor Flynn Date: Mon, 12 Sep 2022 09:06:28 -0400 Subject: [PATCH 3/3] Remove logging on OutputHandler.java. --- .../src/main/java/org/out/handler/OutputHandler.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java index 45d9e25e..3afe2b11 100644 --- a/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java +++ b/DeFi-Data-Engine/DeFi Data Engine/src/main/java/org/out/handler/OutputHandler.java @@ -36,9 +36,6 @@ public Response processSTRT(Packet packet) { } public Response processEDAT(Packet packet) { - System.out.println(packet.getData()); - System.out.println(packet.getSubData()); - if(!manager.containsDestination(packet.getSubData())) return ResponseFactory.response471(packet.getSubData());