From 0d6b2551877ebd1e3939ae0c791545e52bc861f7 Mon Sep 17 00:00:00 2001 From: Mark Vainomaa Date: Sat, 8 Oct 2016 18:07:03 +0300 Subject: [PATCH] Add SimpleRPC --- SimpleRPC/pom.xml | 38 ++++++++++++++++ .../utils/simplerpc/RPCRequest.java | 36 +++++++++++++++ .../utils/simplerpc/RPCResponse.java | 44 +++++++++++++++++++ .../utils/test/simplerpc/TestRPC.java | 44 +++++++++++++++++++ pom.xml | 1 + 5 files changed, 163 insertions(+) create mode 100644 SimpleRPC/pom.xml create mode 100644 SimpleRPC/src/main/java/eu/mikroskeem/utils/simplerpc/RPCRequest.java create mode 100644 SimpleRPC/src/main/java/eu/mikroskeem/utils/simplerpc/RPCResponse.java create mode 100644 SimpleRPC/src/test/java/eu/mikroskeem/utils/test/simplerpc/TestRPC.java diff --git a/SimpleRPC/pom.xml b/SimpleRPC/pom.xml new file mode 100644 index 0000000..a032b31 --- /dev/null +++ b/SimpleRPC/pom.xml @@ -0,0 +1,38 @@ + + + + utils + eu.mikroskeem + 1.0-SNAPSHOT + + 4.0.0 + + simplerpc + + + + com.google.code.gson + gson + 2.7 + + + org.projectlombok + lombok + 1.16.10 + + + org.jetbrains + annotations-java5 + RELEASE + + + junit + junit + 4.12 + test + + + + \ No newline at end of file diff --git a/SimpleRPC/src/main/java/eu/mikroskeem/utils/simplerpc/RPCRequest.java b/SimpleRPC/src/main/java/eu/mikroskeem/utils/simplerpc/RPCRequest.java new file mode 100644 index 0000000..90d9414 --- /dev/null +++ b/SimpleRPC/src/main/java/eu/mikroskeem/utils/simplerpc/RPCRequest.java @@ -0,0 +1,36 @@ +package eu.mikroskeem.utils.simplerpc; + + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import lombok.Data; +import lombok.ToString; +import org.jetbrains.annotations.Nullable; + +import java.io.*; +import java.util.List; + +@Data @ToString +public class RPCRequest implements Serializable { + private String id; + private String method; + private List arguments; + + @Nullable public byte[] toByteArray() { + try { + return new Gson().toJson(this, RPCRequest.class).getBytes("UTF-8"); + } catch (JsonSyntaxException|UnsupportedEncodingException e){ + e.printStackTrace(); + } + return null; + } + + @Nullable public static RPCRequest fromByteArray(byte[] serialized){ + try { + return new Gson().fromJson(new String(serialized, "UTF-8"), RPCRequest.class); + } catch (JsonSyntaxException|UnsupportedEncodingException e){ + e.printStackTrace(); + } + return null; + } +} diff --git a/SimpleRPC/src/main/java/eu/mikroskeem/utils/simplerpc/RPCResponse.java b/SimpleRPC/src/main/java/eu/mikroskeem/utils/simplerpc/RPCResponse.java new file mode 100644 index 0000000..af2c480 --- /dev/null +++ b/SimpleRPC/src/main/java/eu/mikroskeem/utils/simplerpc/RPCResponse.java @@ -0,0 +1,44 @@ +package eu.mikroskeem.utils.simplerpc; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import lombok.Data; +import lombok.ToString; +import org.jetbrains.annotations.Nullable; + +import java.io.*; +import java.util.List; + +/** + * RPCResponse class + */ +@Data @ToString +public class RPCResponse implements Serializable { + private String id; + private Status status; + private String message; + private List response; + + @Nullable public byte[] toByteArray() { + try { + return new Gson().toJson(this, RPCResponse.class).getBytes("UTF-8"); + } catch (JsonSyntaxException |UnsupportedEncodingException e){ + e.printStackTrace(); + } + return null; + } + + @Nullable public static RPCResponse fromByteArray(byte[] serialized){ + try { + return new Gson().fromJson(new String(serialized, "UTF-8"), RPCResponse.class); + } catch (JsonSyntaxException|UnsupportedEncodingException e){ + e.printStackTrace(); + } + return null; + } + + public enum Status { + SUCCESS, + ERROR + } +} diff --git a/SimpleRPC/src/test/java/eu/mikroskeem/utils/test/simplerpc/TestRPC.java b/SimpleRPC/src/test/java/eu/mikroskeem/utils/test/simplerpc/TestRPC.java new file mode 100644 index 0000000..1ec8e7f --- /dev/null +++ b/SimpleRPC/src/test/java/eu/mikroskeem/utils/test/simplerpc/TestRPC.java @@ -0,0 +1,44 @@ +package eu.mikroskeem.utils.test.simplerpc; + +import eu.mikroskeem.utils.simplerpc.RPCRequest; +import eu.mikroskeem.utils.simplerpc.RPCResponse; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.UUID; + +public class TestRPC { + @Test public void testRPCRequestSerialize() throws Exception { + RPCRequest rpcRequest = new RPCRequest(); + rpcRequest.setId(UUID.randomUUID().toString()); + rpcRequest.setMethod("wut"); + rpcRequest.setArguments(new ArrayList(){{ + add("njeeger"); + add(20D); // Apparently Gson always converts int/float to double when passed as Object + add("õäöu"); + add("( ͡° ͜ʖ ͡°)"); + }}); + + RPCRequest unserialized = RPCRequest.fromByteArray( + rpcRequest.toByteArray() + ); + + Assert.assertEquals(rpcRequest.toString(), unserialized.toString()); + } + + @Test public void testRPCResponseSerialize() throws Exception { + RPCResponse rpcResponse = new RPCResponse(); + rpcResponse.setStatus(RPCResponse.Status.SUCCESS); + rpcResponse.setMessage("hey"); + rpcResponse.setResponse(new ArrayList(){{ + add("my name is jeff"); + }}); + + RPCResponse unserialized = RPCResponse.fromByteArray( + rpcResponse.toByteArray() + ); + + Assert.assertEquals(rpcResponse.toString(), unserialized.toString()); + } +} diff --git a/pom.xml b/pom.xml index 78d3020..035e62d 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ Itemutils TextUtils BukkitUtils + SimpleRPC