Explorar el Código

添加事件驱动处理模块

reghao hace 3 años
padre
commit
e91b051f8f

+ 1 - 0
.gitignore

@@ -1,3 +1,4 @@
+*.iml
 
 .idea/
 

+ 8 - 0
jdk/src/main/java/cn/reghao/jutil/jdk/event/AbstractMessage.java

@@ -0,0 +1,8 @@
+package cn.reghao.jutil.jdk.event;
+
+/**
+ * @author reghao
+ * @date 2022-05-05 09:51:15
+ */
+public abstract class AbstractMessage implements Message {
+}

+ 9 - 0
jdk/src/main/java/cn/reghao/jutil/jdk/event/Channel.java

@@ -0,0 +1,9 @@
+package cn.reghao.jutil.jdk.event;
+
+/**
+ * @author reghao
+ * @date 2022-05-05 09:51:45
+ */
+public interface Channel<E extends Message> {
+    void dispatch(E message);
+}

+ 10 - 0
jdk/src/main/java/cn/reghao/jutil/jdk/event/DynamicRouter.java

@@ -0,0 +1,10 @@
+package cn.reghao.jutil.jdk.event;
+
+/**
+ * @author reghao
+ * @date 2022-05-05 09:52:19
+ */
+public interface DynamicRouter<E extends Message> {
+    void registerChannel(Class<? extends E> contentType, Channel<? extends E> channel);
+    void dispatch(E content);
+}

+ 14 - 0
jdk/src/main/java/cn/reghao/jutil/jdk/event/Event.java

@@ -0,0 +1,14 @@
+package cn.reghao.jutil.jdk.event;
+
+/**
+ * @author reghao
+ * @date 2022-05-04 17:44:42
+ */
+public class Event implements Message {
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public Class<? extends Message> getType() {
+        return getClass();
+    }
+}

+ 22 - 0
jdk/src/main/java/cn/reghao/jutil/jdk/event/EventDispatcher.java

@@ -0,0 +1,22 @@
+package cn.reghao.jutil.jdk.event;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2022-05-05 09:55:18
+ */
+public class EventDispatcher implements DynamicRouter<Event> {
+    private final Map<Class<? extends Event>, Handler> handlers = new HashMap<>();
+
+    @Override
+    public void registerChannel(Class<? extends Event> contentType, Channel<? extends Event> channel) {
+        handlers.put(contentType, (Handler) channel);
+    }
+
+    @Override
+    public void dispatch(Event content) {
+        handlers.get(content.getClass()).dispatch(content);
+    }
+}

+ 43 - 0
jdk/src/main/java/cn/reghao/jutil/jdk/event/EventMessage.java

@@ -0,0 +1,43 @@
+package cn.reghao.jutil.jdk.event;
+
+import java.io.Serializable;
+import java.util.UUID;
+
+/**
+ * @author reghao
+ * @date 2022-05-10 03:19:41
+ */
+public class EventMessage implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private String msgId;
+    private long sendTime;
+    private Event event;
+
+    private EventMessage() {
+        this.msgId = UUID.randomUUID().toString();
+        this.sendTime = System.currentTimeMillis();
+    }
+
+    public static EventMessage evt(Event event) {
+        EventMessage evtMsg = new EventMessage();
+        evtMsg.setEvent(event);
+        return evtMsg;
+    }
+
+    public String getMsgId() {
+        return msgId;
+    }
+
+    public long getSendTime() {
+        return sendTime;
+    }
+
+    public void setEvent(Event event) {
+        this.event = event;
+    }
+
+    public Event getEvent() {
+        return event;
+    }
+}

+ 11 - 0
jdk/src/main/java/cn/reghao/jutil/jdk/event/Handler.java

@@ -0,0 +1,11 @@
+package cn.reghao.jutil.jdk.event;
+
+/**
+ * @author reghao
+ * @date 2022-05-05 09:54:21
+ */
+public class Handler implements Channel<Event> {
+    @Override
+    public void dispatch(Event message) {
+    }
+}

+ 11 - 0
jdk/src/main/java/cn/reghao/jutil/jdk/event/Message.java

@@ -0,0 +1,11 @@
+package cn.reghao.jutil.jdk.event;
+
+import java.io.Serializable;
+
+/**
+ * @author reghao
+ * @date 2022-05-05 09:51:15
+ */
+public interface Message extends Serializable {
+    Class<? extends Message> getType();
+}

+ 12 - 1
jdk/src/main/java/cn/reghao/jutil/jdk/serializer/JsonConverter.java

@@ -5,8 +5,9 @@ import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
+import com.google.gson.stream.JsonReader;
 
-import java.io.File;
+import java.io.*;
 import java.lang.reflect.Type;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -58,6 +59,16 @@ public class JsonConverter {
         return gson.fromJson(json, type);
     }
 
+    public static <T> T jsonFileToObject(File jsonFile, Type type) {
+        try {
+            JsonReader reader = gson.newJsonReader(new InputStreamReader(new FileInputStream(jsonFile)));
+            return gson.fromJson(reader, type);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
     public static <T> List<T> jsonToObjects(String json, Class<T> clazz) {
         JsonParser parser = new JsonParser();
         List<T> list = new ArrayList<>();