diff options
author | Yuuta Liang <yuuta@yuuta.moe> | 2022-07-13 11:16:27 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-07-13 11:16:27 -0700 |
commit | 85045e1e4a15e0a5657d189e83dd202a2c37f2b0 (patch) | |
tree | 944bc9ee7a86bd413dfc940e210f21d2434ec7d3 /src/main/java/moe/ymc/acron/serialization/Serializer.java | |
download | acron-85045e1e4a15e0a5657d189e83dd202a2c37f2b0.tar acron-85045e1e4a15e0a5657d189e83dd202a2c37f2b0.tar.gz acron-85045e1e4a15e0a5657d189e83dd202a2c37f2b0.tar.bz2 acron-85045e1e4a15e0a5657d189e83dd202a2c37f2b0.zip |
First Commit
Signed-off-by: Trumeet <yuuta@yuuta.moe>
Diffstat (limited to 'src/main/java/moe/ymc/acron/serialization/Serializer.java')
-rw-r--r-- | src/main/java/moe/ymc/acron/serialization/Serializer.java | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/main/java/moe/ymc/acron/serialization/Serializer.java b/src/main/java/moe/ymc/acron/serialization/Serializer.java new file mode 100644 index 0000000..28c7e18 --- /dev/null +++ b/src/main/java/moe/ymc/acron/serialization/Serializer.java @@ -0,0 +1,54 @@ +package moe.ymc.acron.serialization; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.typeadapters.RuntimeTypeAdapterFactory; +import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; +import moe.ymc.acron.c2s.ReqCmd; +import moe.ymc.acron.c2s.ReqSetConfig; +import moe.ymc.acron.c2s.Request; +import moe.ymc.acron.s2c.*; +import org.jetbrains.annotations.NotNull; + +public class Serializer { + @NotNull + public static Request deserialize(@NotNull TextWebSocketFrame frame) { + final String text = frame.text(); + final RuntimeTypeAdapterFactory<Request> adapter = + RuntimeTypeAdapterFactory.of(Request.class, "type") + .registerSubtype(ReqSetConfig.class, "set_config") + .registerSubtype(ReqCmd.class, "cmd") + ; + final Gson gson = new GsonBuilder() + .registerTypeAdapter(ReqSetConfig.class, new ReqSetConfig.ReqSetConfigDeserializer()) + .registerTypeAdapter(ReqSetConfig.Vec3d.class, new ReqSetConfig.Vec3d.Vec3dDeserializer()) + .registerTypeAdapter(ReqSetConfig.Vec2f.class, new ReqSetConfig.Vec2f.Vec2fDeserializer()) + .registerTypeAdapter(ReqCmd.class, new ReqCmd.ReqCmdDeserializer()) + .registerTypeAdapterFactory(adapter) + .create(); + final Request request = gson.fromJson(text, Request.class); + request.validate(); + return request; + } + + @NotNull + public static TextWebSocketFrame serialize(@NotNull Event message) { + final RuntimeTypeAdapterFactory<Event> adapter = + RuntimeTypeAdapterFactory.of(Event.class, "type") + .registerSubtype(EventDisconnected.class, "disconnect") + .registerSubtype(EventPlayerMessage.class, "message") + .registerSubtype(EventPlayerJoined.class, "join") + .registerSubtype(EventEntityDeath.class, "death") + .registerSubtype(EventCmdOut.class, "cmd_output") + .registerSubtype(EventCmdRes.class, "cmd_result") + .registerSubtype(EventLagging.class, "lagging") + .registerSubtype(EventCmdDenied.class, "cmd_denied") + .registerSubtype(EventError.class, "error") + .registerSubtype(EventOk.class, "ok") + ; + final Gson gson = new GsonBuilder() + .registerTypeAdapterFactory(adapter) + .create(); + return new TextWebSocketFrame(gson.toJson(message, message.getClass())); + } +} |