Add SimpleRPC
This commit is contained in:
parent
3747db125d
commit
0d6b255187
38
SimpleRPC/pom.xml
Normal file
38
SimpleRPC/pom.xml
Normal file
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>utils</artifactId>
|
||||
<groupId>eu.mikroskeem</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>simplerpc</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.7</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.16.10</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains</groupId>
|
||||
<artifactId>annotations-java5</artifactId>
|
||||
<version>RELEASE</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -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<Object> 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;
|
||||
}
|
||||
}
|
@ -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<Object> 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
|
||||
}
|
||||
}
|
@ -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<Object>(){{
|
||||
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<Object>(){{
|
||||
add("my name is jeff");
|
||||
}});
|
||||
|
||||
RPCResponse unserialized = RPCResponse.fromByteArray(
|
||||
rpcResponse.toByteArray()
|
||||
);
|
||||
|
||||
Assert.assertEquals(rpcResponse.toString(), unserialized.toString());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user