浏览代码

模組熱插拔完成

0x0001F36D 5 年之前
父节点
当前提交
24a564c7e0

+ 4 - 4
src/Yuuna.Contracts/Modules/ModuleBase.cs

@@ -15,7 +15,7 @@ namespace Yuuna.Contracts.Modules
         /// <summary>
         /// 中繼資料。
         /// </summary> 
-        public ModuleMetadataAttribute Metadata { get; }
+        public IModuleMetadata Metadata { get; }
 
         public Guid Id { get; }
 
@@ -26,7 +26,7 @@ namespace Yuuna.Contracts.Modules
             this.Metadata = ModuleMetadataAttribute.GetMetadata(t);
         }
 
-        public bool Initialized { get; private set; }
+        private bool _initialized;
 
         /// <summary>
         /// 初始化模組
@@ -36,7 +36,7 @@ namespace Yuuna.Contracts.Modules
         internal void Initialize(ITextSegmenter textSegmenter, IGroupManager groupManager, out IPatternSet patterns)
         {
             patterns = null;
-            if (!this.Initialized)
+            if (!this._initialized)
             {
                 try
                 {
@@ -44,7 +44,7 @@ namespace Yuuna.Contracts.Modules
                     this.BuildPatterns(groupManager, patterns as IPatternBuilder);
                     textSegmenter.Load(groupManager);
                     this.AfterInitialize();
-                    this.Initialized = true;
+                    this._initialized = true;
                     this.Patterns = patterns;
                 }
                 catch (Exception e)

+ 1 - 1
src/Yuuna.Contracts/Modules/ModuleMetadataAttribute.cs

@@ -19,7 +19,7 @@ namespace Yuuna.Contracts.Modules
         public string Url { get; set; }
         public string Description { get; set; }
 
-        internal static ModuleMetadataAttribute GetMetadata(Type type)
+        internal static IModuleMetadata GetMetadata(Type type)
         {
             var meta = type.GetCustomAttribute<ModuleMetadataAttribute>();
             if (meta is null)

+ 31 - 3
src/Yuuna/EntryPoint.cs

@@ -20,11 +20,39 @@ namespace Yuuna
     using Yuuna.Common.Serialization;
 
     internal class EntryPoint
-    { 
+    {
         public static async Task Main(string[] args)
         {
-            var k = WebHost.RunAsync(); 
-            await k;
+
+            var canResponses = new Response[]
+            {
+                    (Moods.Sad, "我不清楚你想做什麼 OvQ"),
+                    (Moods.Sad, "我不懂你想幹嘛 QAQ"),
+                    (Moods.Sad, "我不知道你想幹嘛 OHQ"),
+            };
+            var r = new Actor(new JiebaTextSegmenter(), canResponses, default, ModuleManager.Instance.Modules);
+
+            while (true)
+            {
+                var x = Console.ReadLine();
+
+                if (x.Equals("unload-all"))
+                {
+                    ModuleManager.Instance.UnloadAll();
+                    foreach (var m in ModuleManager.Instance.Modules)
+                        Console.WriteLine(m.Metadata.Name);
+                }
+                else if (x.Equals("reload-all"))
+                {
+                    ModuleManager.Instance.ReloadAll();
+                    foreach (var m in ModuleManager.Instance.Modules)
+                        Console.WriteLine(m.Metadata.Name);
+                }
+                else if (r.Accept(x, out var rx))
+                    Console.WriteLine(rx.Message);
+            }
+            //var k = WebHost.RunAsync(); 
+            //await k;
         }
     }
 }