From a55490c184330241da5a1e0875646b00a7989c81 Mon Sep 17 00:00:00 2001 From: userA Date: Fri, 21 Jul 2023 02:17:04 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E5=AE=8C=E6=88=90=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=9E=B6=E6=9E=84=E6=90=AD=E5=BB=BA=202?= =?UTF-8?q?=EF=BC=8C=E5=AE=8C=E6=88=90hotModule=E6=A8=A1=E5=9D=97=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=88=9B=E5=BB=BA=203=EF=BC=8C?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E5=90=AF=E5=8A=A8=E6=97=A5=E5=BF=97=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/example/cache/FileCacheManager.java | 2 + .../example/init/FileCacheManagerInit.java | 2 +- .../example/init/ModuleSrcConfigFileInit.java | 2 +- .../java/org/example/cache/FileCacheTest.java | 2 - .../java/org/example/config/FollowDog.java | 8 ++ .../org/example/config/HotModuleConfig.java | 29 +++--- .../example/constpool/HotModuleConstPool.java | 13 +++ .../org/example/guard/HotModuleGuard.java | 4 + .../java/org/example/guard/task/Guard.java | 8 ++ .../init/HotModuleConfigInitMachine.java | 56 ++++++++++++ .../example/init/HotModuleInitMachine.java | 38 ++++++++ .../org/example/init/CommonInitMachine.java | 63 +++++++++++++ .../example/init/ComponentInitMachine.java | 17 ++++ .../java/org/example/init/InitMachine.java | 4 +- .../org/example/init/ModuleInitMachine.java | 90 +++++++++++++++++++ .../org/example/log/FileModuleLogger.java | 12 +++ .../org/example/log/InitMachineLogger.java | 16 ++++ console/pom.xml | 2 +- .../java/org/example/ConsoleApplication.java | 4 +- 19 files changed, 352 insertions(+), 20 deletions(-) create mode 100644 HotModule/src/main/java/org/example/constpool/HotModuleConstPool.java create mode 100644 HotModule/src/main/java/org/example/guard/task/Guard.java create mode 100644 HotModule/src/main/java/org/example/init/HotModuleConfigInitMachine.java create mode 100644 HotModule/src/main/java/org/example/init/HotModuleInitMachine.java create mode 100644 common/src/main/java/org/example/init/CommonInitMachine.java create mode 100644 common/src/main/java/org/example/init/ComponentInitMachine.java create mode 100644 common/src/main/java/org/example/init/ModuleInitMachine.java create mode 100644 common/src/main/java/org/example/log/FileModuleLogger.java create mode 100644 common/src/main/java/org/example/log/InitMachineLogger.java diff --git a/FileModule/src/main/java/org/example/cache/FileCacheManager.java b/FileModule/src/main/java/org/example/cache/FileCacheManager.java index 77d2891..fee165e 100644 --- a/FileModule/src/main/java/org/example/cache/FileCacheManager.java +++ b/FileModule/src/main/java/org/example/cache/FileCacheManager.java @@ -1,5 +1,6 @@ package org.example.cache; +import org.example.log.FileModuleLogger; import org.example.util.TimeUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -75,6 +76,7 @@ public class FileCacheManager { fileCaches.add(fileCache); fileCacheMap.put(fileCache.getFullFilePath(),fileCache); initSleepTime(); + FileModuleLogger.logger.info("FileCacheManager add a new FileCache:{}",fileCache.getFullFilePath()); } return false; } diff --git a/FileModule/src/main/java/org/example/init/FileCacheManagerInit.java b/FileModule/src/main/java/org/example/init/FileCacheManagerInit.java index 38aa4c0..4bdd5d9 100644 --- a/FileModule/src/main/java/org/example/init/FileCacheManagerInit.java +++ b/FileModule/src/main/java/org/example/init/FileCacheManagerInit.java @@ -6,7 +6,7 @@ import org.example.cache.FileCacheManagerInstance; * @author Genius * @date 2023/04/26 02:09 **/ -public class FileCacheManagerInit implements InitMachine{ +public class FileCacheManagerInit extends CommonInitMachine{ @Override public boolean init() { diff --git a/FileModule/src/main/java/org/example/init/ModuleSrcConfigFileInit.java b/FileModule/src/main/java/org/example/init/ModuleSrcConfigFileInit.java index 8fa6f1c..ad2ba7d 100644 --- a/FileModule/src/main/java/org/example/init/ModuleSrcConfigFileInit.java +++ b/FileModule/src/main/java/org/example/init/ModuleSrcConfigFileInit.java @@ -15,7 +15,7 @@ import java.util.Map; * @date 2023/04/20 18:34 **/ -public class ModuleSrcConfigFileInit implements InitMachine { +public class ModuleSrcConfigFileInit extends CommonInitMachine { private Logger logger = LoggerFactory.getLogger(ModuleSrcConfigFileInit.class); diff --git a/FileModule/src/test/java/org/example/cache/FileCacheTest.java b/FileModule/src/test/java/org/example/cache/FileCacheTest.java index 33f87a3..a409f61 100644 --- a/FileModule/src/test/java/org/example/cache/FileCacheTest.java +++ b/FileModule/src/test/java/org/example/cache/FileCacheTest.java @@ -61,7 +61,6 @@ public class FileCacheTest { FileCacheManager manager = new FileCacheManager(List.of(fileCache)); manager.start(); - System.out.println(fileCache.get("barrage","src")); fileCache.append(1,"barrage","src"); } @@ -109,7 +108,6 @@ public class FileCacheTest { FileCacheManager manager = new FileCacheManager(List.of(fileCache)); manager.start(); - System.out.println(manager.addFileCache(fileCache)); } @Test diff --git a/HotModule/src/main/java/org/example/config/FollowDog.java b/HotModule/src/main/java/org/example/config/FollowDog.java index cb42290..e904419 100644 --- a/HotModule/src/main/java/org/example/config/FollowDog.java +++ b/HotModule/src/main/java/org/example/config/FollowDog.java @@ -19,4 +19,12 @@ public class FollowDog { private int top; //前几个 private List banLiver; //去除的主播,可以是正则 + @Override + public String toString() { + return "FollowDog{" + + "moduleName='" + moduleName + '\'' + + ", top=" + top + + ", banLiver=" + banLiver + + '}'; + } } diff --git a/HotModule/src/main/java/org/example/config/HotModuleConfig.java b/HotModule/src/main/java/org/example/config/HotModuleConfig.java index 2db456f..39b458c 100644 --- a/HotModule/src/main/java/org/example/config/HotModuleConfig.java +++ b/HotModule/src/main/java/org/example/config/HotModuleConfig.java @@ -2,6 +2,7 @@ package org.example.config; import org.example.bean.ConfigFile; import org.example.constpool.ConstPool; +import org.example.constpool.HotModuleConstPool; import java.nio.file.Paths; import java.util.ArrayList; @@ -13,25 +14,23 @@ import java.util.Map; * @date 2023/07/20 00:20 **/ public class HotModuleConfig extends ConfigFile> { - private static final FollowDog allLivesDog = new FollowDog(FollowDog.ALL_LIVES,6,new ArrayList<>()); private static final int FiveMinute = 0x493E0; - private static final String filePath = "./config"; - private static final String fileName = "hotmodule.config"; + private static final String fileName = "hotModuleConfig.json"; public HotModuleConfig(){ - super(filePath,fileName, + super(HotModuleConstPool.HOT_MODULE_CONFIG_ROOT,fileName, Map.of("Enable", 1, "Module", List.of( - new ModuleSetting(ConstPool.DOUYU, true, new ArrayList<>(), - false, List.of(allLivesDog), FiveMinute, FiveMinute), - new ModuleSetting(ConstPool.BILIBILI, true, new ArrayList<>(), - false, List.of(allLivesDog), FiveMinute, FiveMinute), - new ModuleSetting(ConstPool.HUYA, true, new ArrayList<>(), - false, List.of(allLivesDog), FiveMinute, FiveMinute), - new ModuleSetting(ConstPool.DOUYU, true, new ArrayList<>(), - false, List.of(allLivesDog), FiveMinute, FiveMinute) + new ModuleSetting(ConstPool.DOUYU, true, new ArrayList<>(), false, + List.of(allLiveDog()), FiveMinute, FiveMinute), + new ModuleSetting(ConstPool.BILIBILI, true, new ArrayList<>(), false, + List.of(allLiveDog()), FiveMinute, FiveMinute), + new ModuleSetting(ConstPool.HUYA, true, new ArrayList<>(), false, + List.of(allLiveDog()), FiveMinute, FiveMinute), + new ModuleSetting(ConstPool.DOUYING, true, new ArrayList<>(), false, + List.of(allLiveDog()), FiveMinute, FiveMinute) ), "GuardNum",10 ) @@ -39,6 +38,10 @@ public class HotModuleConfig extends ConfigFile> { } public static String getFullFilePath(){ - return Paths.get(filePath,fileName).toString(); + return Paths.get(HotModuleConstPool.HOT_MODULE_CONFIG_ROOT,fileName).toString(); + } + + private static FollowDog allLiveDog(){ + return new FollowDog(FollowDog.ALL_LIVES,6,new ArrayList<>()); } } diff --git a/HotModule/src/main/java/org/example/constpool/HotModuleConstPool.java b/HotModule/src/main/java/org/example/constpool/HotModuleConstPool.java new file mode 100644 index 0000000..ea53923 --- /dev/null +++ b/HotModule/src/main/java/org/example/constpool/HotModuleConstPool.java @@ -0,0 +1,13 @@ +package org.example.constpool; + +import org.example.cache.FileCacheManagerInstance; +import org.example.config.HotModuleConfig; + +/** + * @author Genius + * @date 2023/07/21 00:21 + **/ +public class HotModuleConstPool { + public static final String HOT_MODULE_CONFIG_ROOT = (String) GlobalFileCache.ModuleSrcConfigFile.get("hot","src"); + +} diff --git a/HotModule/src/main/java/org/example/guard/HotModuleGuard.java b/HotModule/src/main/java/org/example/guard/HotModuleGuard.java index 37d4c06..c9a0a61 100644 --- a/HotModule/src/main/java/org/example/guard/HotModuleGuard.java +++ b/HotModule/src/main/java/org/example/guard/HotModuleGuard.java @@ -1,8 +1,10 @@ package org.example.guard; +import org.example.cache.FileCache; import org.example.cache.FileCacheManager; import org.example.cache.FileCacheManagerInstance; import org.example.config.HotModuleConfig; +import org.example.constpool.HotModuleConstPool; import org.example.core.control.impl.DouyuHotLiveLoadTask; import org.example.core.control.impl.DouyuHotModuleLoadTask; import org.example.core.processor.hotmodule.DouyuHotLiveProcessor; @@ -19,6 +21,8 @@ import java.util.concurrent.TimeUnit; public class HotModuleGuard { private static final long delayTime = 10*1000; + + private FileCache HotModuleFileCache = FileCacheManagerInstance.getInstance().getFileCache(HotModuleConfig.getFullFilePath()); private ScheduledExecutorService hotModuleGuardPool = Executors.newScheduledThreadPool( (Integer)FileCacheManagerInstance.getInstance().getFileCache(HotModuleConfig.getFullFilePath()).get("GuardNum") ); diff --git a/HotModule/src/main/java/org/example/guard/task/Guard.java b/HotModule/src/main/java/org/example/guard/task/Guard.java new file mode 100644 index 0000000..c2cb954 --- /dev/null +++ b/HotModule/src/main/java/org/example/guard/task/Guard.java @@ -0,0 +1,8 @@ +package org.example.guard.task; + +/** + * @author Genius + * @date 2023/07/21 02:13 + **/ +public class Guard { +} diff --git a/HotModule/src/main/java/org/example/init/HotModuleConfigInitMachine.java b/HotModule/src/main/java/org/example/init/HotModuleConfigInitMachine.java new file mode 100644 index 0000000..3768924 --- /dev/null +++ b/HotModule/src/main/java/org/example/init/HotModuleConfigInitMachine.java @@ -0,0 +1,56 @@ +package org.example.init; + +/** + * @author Genius + * @date 2023/07/21 00:18 + **/ + +import org.example.cache.FileCache; +import org.example.cache.FileCacheManagerInstance; +import org.example.config.HotModuleConfig; +import org.example.constpool.HotModuleConstPool; +import org.example.exception.FileCacheException; +import org.example.log.HotModuleLogger; +import org.example.util.FileUtil; +import org.example.util.JsonFileUtil; +import org.slf4j.Logger; + +import java.nio.file.Paths; +import java.util.Map; + +/** + * 热门模块配置文件初始化机器 + */ +public class HotModuleConfigInitMachine extends CommonInitMachine { + + private String filePath = HotModuleConfig.getFullFilePath(); + + public HotModuleConfigInitMachine() { + super(HotModuleLogger.logger); + } + + @Override + public boolean init() { + HotModuleConfig hotModuleConfig = new HotModuleConfig(); + if(!FileUtil.isFileExist(filePath)){ + JsonFileUtil.writeJsonFile(filePath,hotModuleConfig.packageConfig()); + try { + FileCache fileCache = new FileCache(hotModuleConfig); + FileCacheManagerInstance.getInstance().addFileCache(fileCache); + } catch (FileCacheException e) { + return fail(e.toString()); + } + return success(String.format("[✔]%s is created,{%s} plugin init success!",filePath,this.getClass().toString())); + }else{ + Map data = JsonFileUtil.readJsonFile(filePath); + hotModuleConfig.setData(data); + try { + FileCache fileCache = new FileCache(hotModuleConfig); + FileCacheManagerInstance.getInstance().addFileCache(fileCache); + } catch (FileCacheException e) { + return fail(e.toString()); + } + } + return success(String.format("[✔]%s read in disk,{%s} plugin init success!",filePath,this.getClass().toString())); + } +} diff --git a/HotModule/src/main/java/org/example/init/HotModuleInitMachine.java b/HotModule/src/main/java/org/example/init/HotModuleInitMachine.java new file mode 100644 index 0000000..94c3949 --- /dev/null +++ b/HotModule/src/main/java/org/example/init/HotModuleInitMachine.java @@ -0,0 +1,38 @@ +package org.example.init; + +import org.example.log.HotModuleLogger; + +import java.util.List; + +/** + * @author Genius + * @date 2023/07/21 00:16 + **/ + +/** + * 整个热门模块的模块初始化类 + */ +public class HotModuleInitMachine extends ModuleInitMachine{ + + + + public HotModuleInitMachine() { + super( + List.of(new HotModuleConfigInitMachine()), + "HotModule", + HotModuleLogger.logger + ); + } + + @Override + public boolean init() { + return initLogger(()->{ + for (InitMachine initMachine : this.getInitMachines()) { + if(!initMachine.init()){ + return fail(); + } + } + return success(); + }); + } +} diff --git a/common/src/main/java/org/example/init/CommonInitMachine.java b/common/src/main/java/org/example/init/CommonInitMachine.java new file mode 100644 index 0000000..02f5884 --- /dev/null +++ b/common/src/main/java/org/example/init/CommonInitMachine.java @@ -0,0 +1,63 @@ +package org.example.init; + +/** + * @author Genius + * @date 2023/07/21 00:57 + **/ + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 模块中的小模块初始化抽象类 + */ +public abstract class CommonInitMachine implements ComponentInitMachine{ + + protected Logger logger; + + public CommonInitMachine(Logger logger){ + this.logger = logger; + } + + public CommonInitMachine(){ + this.logger = LoggerFactory.getLogger(this.getClass().getName()); + } + + + @Override + public void successLog() { + successLog(String.format("[✔] {%s} init success!",this.getClass().toString())); + } + + @Override + public void successLog(String str) { + logger.info(str); + } + + @Override + public void failLog() { + failLog(String.format("[❌] {%s} init error!",this.getClass().toString())); + } + + @Override + public void failLog(String str) { + logger.error(str); + } + + @Override + public boolean fail(String failCause) { + failLog(String.format("[❌] {%s} init error! Execption:{}",this.getClass().toString(),failCause)); + return false; + } + + @Override + public boolean success() { + successLog(); + return true; + } + + public boolean success(String str){ + successLog(str); + return true; + } +} diff --git a/common/src/main/java/org/example/init/ComponentInitMachine.java b/common/src/main/java/org/example/init/ComponentInitMachine.java new file mode 100644 index 0000000..3d1ef53 --- /dev/null +++ b/common/src/main/java/org/example/init/ComponentInitMachine.java @@ -0,0 +1,17 @@ +package org.example.init; + +/** + * @author Genius + * @date 2023/07/21 00:12 + **/ + +public interface ComponentInitMachine extends InitMachine{ + + default boolean fail(){ + return fail(""); + } + + boolean fail(String failCause); + + boolean success(); +} diff --git a/common/src/main/java/org/example/init/InitMachine.java b/common/src/main/java/org/example/init/InitMachine.java index 45a2ac8..c259530 100644 --- a/common/src/main/java/org/example/init/InitMachine.java +++ b/common/src/main/java/org/example/init/InitMachine.java @@ -1,13 +1,15 @@ package org.example.init; +import org.example.log.InitMachineLogger; + /** * @author Genius * @date 2023/04/20 19:36 **/ //模块初始化接口 -public interface InitMachine { +public interface InitMachine extends InitMachineLogger { boolean init(); } diff --git a/common/src/main/java/org/example/init/ModuleInitMachine.java b/common/src/main/java/org/example/init/ModuleInitMachine.java new file mode 100644 index 0000000..3343771 --- /dev/null +++ b/common/src/main/java/org/example/init/ModuleInitMachine.java @@ -0,0 +1,90 @@ +package org.example.init; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Supplier; + +/** + * @author Genius + * @date 2023/07/21 00:39 + **/ + +/** + * 模块初始化机器,用于整个模块的初始化 + */ +public abstract class ModuleInitMachine extends CommonInitMachine{ + + private List initMachines; + + private String moduleName; + + + public ModuleInitMachine(List initMachines,String moduleName) { + this.initMachines = initMachines; + this.moduleName = moduleName; + } + + public ModuleInitMachine(List initMachines,String moduleName,Logger logger){ + super(logger); + this.initMachines = initMachines; + this.moduleName = moduleName; + } + + + public List getInitMachines() { + return initMachines; + } + + public void setInitMachines(List initMachines) { + this.initMachines = initMachines; + } + + + @Override + public void successLog() { + successLog(String.format("✅ <%s> init success! init %s plugins ! ",moduleName,initMachines.size())); + } + + @Override + public void successLog(String str) { + logger.info(str); + } + + @Override + public void failLog() { + failLog(String.format("⛔ <%s> init error!",moduleName)); + } + + @Override + public void failLog(String str) { + logger.info(str); + } + + + protected boolean initLogger(Supplier init){ + logger.info("🕑 <{}> start to init,total plugins:{}",moduleName,initMachines.size()); + return init.get(); + } + + @Override + public boolean fail() { + failLog(); + return false; + } + + @Override + public boolean fail(String failCause) { + failLog(String.format("⛔ <%s> init error! Execption:%s",moduleName,failCause)); + return false; + } + + @Override + public boolean success() { + successLog(); + return true; + } +} diff --git a/common/src/main/java/org/example/log/FileModuleLogger.java b/common/src/main/java/org/example/log/FileModuleLogger.java new file mode 100644 index 0000000..d4a69b3 --- /dev/null +++ b/common/src/main/java/org/example/log/FileModuleLogger.java @@ -0,0 +1,12 @@ +package org.example.log; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Genius + * @date 2023/07/21 00:32 + **/ +public class FileModuleLogger { + public static final Logger logger = LoggerFactory.getLogger("FileModuleLogger"); +} diff --git a/common/src/main/java/org/example/log/InitMachineLogger.java b/common/src/main/java/org/example/log/InitMachineLogger.java new file mode 100644 index 0000000..435aa9f --- /dev/null +++ b/common/src/main/java/org/example/log/InitMachineLogger.java @@ -0,0 +1,16 @@ +package org.example.log; + + +/** + * 启动日志接口 + */ +public interface InitMachineLogger { + + void successLog(); + + void successLog(String str); + + void failLog(); + + void failLog(String str); +} diff --git a/console/pom.xml b/console/pom.xml index e57f167..6400b6a 100644 --- a/console/pom.xml +++ b/console/pom.xml @@ -35,7 +35,7 @@ org.example - FileModule + HotModule 1.0-SNAPSHOT diff --git a/console/src/main/java/org/example/ConsoleApplication.java b/console/src/main/java/org/example/ConsoleApplication.java index 6178ad6..3fac98f 100644 --- a/console/src/main/java/org/example/ConsoleApplication.java +++ b/console/src/main/java/org/example/ConsoleApplication.java @@ -3,6 +3,7 @@ package org.example; import org.example.exception.FileCacheException; import org.example.init.FileCacheManagerInit; +import org.example.init.HotModuleInitMachine; import org.example.init.InitWorld; import org.example.init.ModuleSrcConfigFileInit; import org.springframework.boot.SpringApplication; @@ -30,7 +31,8 @@ public class ConsoleApplication { .setInitMachines( List.of( new ModuleSrcConfigFileInit(), - new FileCacheManagerInit() + new FileCacheManagerInit(), + new HotModuleInitMachine() ) ).start(); }