shjung 1 жил өмнө
parent
commit
ecd76b0811

+ 6 - 0
pom.xml

@@ -52,6 +52,12 @@
 			<artifactId>fastjson</artifactId>
 			<version>1.2.83</version>
 		</dependency>
+		<!-- for com.google.common.util.concurrent -->
+		<dependency>
+			<groupId>com.google.guava</groupId>
+			<artifactId>guava</artifactId>
+			<version>26.0-jre</version>
+		</dependency>
 
 	</dependencies>
 

+ 8 - 0
src/main/java/com/its/common/event/Event.java

@@ -0,0 +1,8 @@
+package com.its.common.event;
+
+
+import lombok.Data;
+
+@Data
+public abstract class Event {
+}

+ 41 - 0
src/main/java/com/its/common/event/EventBus.java

@@ -0,0 +1,41 @@
+package com.its.common.event;
+
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.*;
+
+@Slf4j
+public class EventBus {
+
+    private static Map<Class<? extends Event>, List<EventHandler>> listenerMap = new ConcurrentHashMap<>();
+    private static ThreadFactory sceneThreadFactory = new ThreadFactoryBuilder().setNameFormat("event-loop-%d").build();
+    private static ExecutorService singleThreadSchedule = Executors.newSingleThreadScheduledExecutor(sceneThreadFactory);
+
+    public static <E extends Event> void subscribe(Class<? extends Event> eventClass, EventHandler<E> eventHandler) {
+        List<EventHandler> eventHandlerList = listenerMap.get(eventClass);
+        if (null == eventHandlerList) {
+            eventHandlerList = new CopyOnWriteArrayList<>();
+        }
+
+        eventHandlerList.add(eventHandler);
+        listenerMap.put(eventClass,eventHandlerList);
+    }
+
+    public static <E extends Event> void publish(E event) {
+        List<EventHandler> handlerList =  listenerMap.get(event.getClass());
+        if (!Objects.isNull(handlerList)) {
+            for (EventHandler eventHandler: handlerList) {
+                singleThreadSchedule.execute( () -> eventHandler.handle(event));
+            }
+        }
+    }
+
+    public static void close() throws Exception {
+        listenerMap.clear();
+    }
+
+}

+ 9 - 0
src/main/java/com/its/common/event/EventHandler.java

@@ -0,0 +1,9 @@
+package com.its.common.event;
+
+@FunctionalInterface
+public interface EventHandler<E extends Event> {
+
+    // Consumer
+    void handle(E event);
+
+}

+ 16 - 0
src/main/java/com/its/common/util/FileUtil.java

@@ -5,14 +5,30 @@ import org.simpleframework.xml.Serializer;
 import org.simpleframework.xml.core.Persister;
 
 import java.io.*;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
 import java.util.List;
 import java.util.function.Predicate;
 
 @Slf4j
 public class FileUtil {
+
+    private static final Charset DEFAULT_CHARSET = Charset.defaultCharset();
+
     private FileUtil() {
     }
 
+    public static byte[] loadFile(final String fileLocation) {
+        try {
+            final File file = new File(fileLocation);
+            final byte[] fileContents = Files.readAllBytes(file.toPath());
+
+            return fileContents;
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
     public static void getRfFiles(List<File> files, File file, String[] includes) {
         if (!file.exists()) {
             return;

+ 18 - 0
src/main/java/com/its/common/util/SingletonTemplate.java

@@ -0,0 +1,18 @@
+package com.its.common.util;
+
+public class SingletonTemplate {
+    private static volatile SingletonTemplate singletonTemplate;
+    private SingletonTemplate() {
+    }
+
+    public static SingletonTemplate getInstance() {
+        if (singletonTemplate == null) {
+            synchronized (SingletonTemplate.class) {
+                if (singletonTemplate == null) {
+                    singletonTemplate = new SingletonTemplate();
+                }
+            }
+        }
+        return singletonTemplate;
+    }
+}