From 0c6eefdd7e89843cb16222641f7703929e100bb3 Mon Sep 17 00:00:00 2001 From: jkpete <1031139173@qq.com> Date: Sat, 26 Apr 2025 14:37:04 +0800 Subject: [PATCH] Update ReadMe --- Example/UsingTest/Script/EGSaveTest.cs | 5 +- ReadMe.md | 231 ++++++------------ .../{ProtocolTools => OtherTools}/EGModbus.cs | 0 3 files changed, 78 insertions(+), 158 deletions(-) rename addons/EGFramework/Module/{ProtocolTools => OtherTools}/EGModbus.cs (100%) diff --git a/Example/UsingTest/Script/EGSaveTest.cs b/Example/UsingTest/Script/EGSaveTest.cs index a9bf68f..bada628 100644 --- a/Example/UsingTest/Script/EGSaveTest.cs +++ b/Example/UsingTest/Script/EGSaveTest.cs @@ -47,7 +47,8 @@ namespace EGFramework.Examples.Test{ public void TestProcess(){ this.EGEnabledProtocolTool(); this.EGProcess().InitProcess("cmd.exe"); - this.EGProcess().SendStringData("cmd.exe","SaveData\\ffmpeg.exe -version\n"); + // this.EGProcess().SendStringData("cmd.exe","SaveData\\ffmpeg.exe -version\n"); + this.EGProcess().SendStringData("cmd.exe","ipconfig"); } public async void TestSsh(){ @@ -234,7 +235,7 @@ namespace EGFramework.Examples.Test{ { try { - GD.Print(protocolData); + GD.Print("[String]"+protocolData); // GD.Print("[Bytes]"+protocolBytes); return true; } diff --git a/ReadMe.md b/ReadMe.md index 5f82837..a447e77 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -5,8 +5,10 @@ # 引言 > `EGFramework`全称Everyone's Godot framework,基于`Godot`开源引擎,使用C#编写,目前仅兼容`Godot4.3 - .NET`,部分兼容`Godot3.5 - .NET`,是完全开源的组件式,功能分布的框架,使用时可以自己根据需求安装对应的`Module`来实现对应的功能,同样也可以裁剪对应的`Module`来删减对应的功能。 -> -> `Module` 是`EGFramework`的核心组成部分,也是`EGFramework`中重要的扩展依据。详细可以查看第二部分-Module。 +> +> `Module` 是`EGFramework`的核心组成部分,也是`EGFramework`中重要的扩展依据。 +> +> 目前该框架可能还有很多欠缺与不足,最终目的是做一个方便可靠好用的通讯&存储&资源生成&界面生成框架、用户无需过多学习、开箱即用。 # 关于Godot引擎(摘自[Godot Engine (4.x) 简体中文文档](https://docs.godotengine.org/zh-cn/4.x/about/introduction.html)) @@ -20,7 +22,7 @@ ## 1.下载开发环境 -本章节所有环境均在开源IDE `VSCode`,`Godot4.2 - .NET` 的环境下进行,请确保已经下载好`VSCode`,`Godot4.2 - .NET`,如果您有购买Rider或者其他编码工具可以根据自己的喜好来替代VSCode。 +本章节所有环境均在开源IDE `VSCode`,`Godot4.3 - .NET` 的环境下进行,请确保已经下载好`VSCode`,`Godot4.3 - .NET`,本项目Godot版本可能并非最新,但作者会尽可能的升级至最新版的Godot,在此之间请按照如下方式进行框架的集成工作,如果您有购买Rider或者其他编码工具可以根据自己的喜好来替代VSCode。 ## 2.VSCode 插件安装 @@ -30,15 +32,29 @@ ## 3.Nuget包的安装 -打开VSCode,按下`Ctrl+Shift+P`,在搜索栏里面搜索`Nuget Package ManagerGUI`,选择右侧`Install New Pakage` ,依次安装以下依赖包: - -- System.IO.Ports(仅EGSerialPort 使用) - -- Newtonsoft.Json(使用场合较多) +打开VSCode,将如下部分替换或增加至您名称为*.csproj后缀的工程文件下。 -- Microsoft.Data.Sqlite(仅EGSQLite使用) +```xml + + + + + + + + + + + + + + + + + +``` -- System.Text.Encoding.CodePages(ProtocolTools目录下均有使用) +首次编译确保计算机可以联网,并可以连接该网站[NuGet Gallery | Home](https://www.nuget.org/) 注意:这些Nuget包仅为目前框架版本所用,后续可能会有新的Nuget包导入,会在此处列出。 @@ -48,88 +64,74 @@ 无需担心,除了部分Module存在相关依赖,大部分Module是支持直接删除的。 -## 5.EG插件库简介 +## 5.EGFramework构成一栏 + +目前已有的EGFramework功能组件。标记是目前已编写完成,未标记是未编写完成或未测试。 -### 5.1 EGSave篇 +- [x] ProtocolTools&ProtocolExtension +- [x] SaveTools +- [x] OtherTools +- [x] Extension +- [x] NodeExtension(仅Godot下可用) +- [ ] GenerateTools +- [ ] UITools + +### 5.1 消息篇(EGMessage-ProtocolTools) --- -#### Sqlite数据持久化扩展: +#### 通讯支持 -注意:本功能需要依赖安装 `Microsoft.Data.Sqlite` Nuget扩展,将以下代码放入*.csproj 工程文件中,或者通过Nuget安装上述包。 +- [x] TCPClient +- [x] TCPServer +- [x] UDP(Listen&Send) +- [x] SerialPort +- [x] Ssh +- [x] WebSocketClient +- [x] Bacnet +- [x] MQTT +- [ ] HttpClient +- [ ] HttpServer -```xml - -``` +#### 异步处理支持 -使用案例(保存数据=>保存单一数据,目前来看该功能仍需改进): +- [x] FileStream +- [x] Process -```csharp - public partial class EGSaveTest : Node,IEGFramework - { - public override void _Ready() - { - TestSqlite(); - } - - public void TestSqlite(){ - // string result = this.EGSqlite().CreateTable(); - this.EGSqlite().SaveData(new SqliteBackpackItem{ - ItemID = 10, - ItemCount = 1, - BackpackID = 1, - }); - GD.Print(this.EGSqlite().ExceptionMsg); - } - } - public struct SqliteBackpackItem{ - public int ItemID; - public int ItemCount; - public int BackpackID; - } -``` +### 5.2 存储篇(EGMessage-ProtocolTools) -结构类要求:保存字段不能使用 {get;set;},所有数据会自动生成自增序列的ID,字段名称不能为ID。 +#### 键值对象存储支持 -# 二、框架简介 +- [x] Json +- [x] Redis +- [ ] Byte -由于该框架使用了较多的Nuget包实现相关的功能,所以安装较为繁琐,同时因为用到较多的扩展方法,提示词可能比较冗余。您可以通过删除对应的Module来定制化自己的框架,也可以新增自己的Module来扩展自己的框架。 +#### 数据存储支持 -本框架所使用的一切Nuget包均满足MIT开源协议,如果使用的Nuget包牵扯有其他协议请联系作者QQ:1031139173,会删除对应的Module功能保证该框架满足MIT协议。 +- [x] Csv +- [x] LiteDB +- [x] MySQL(Dapper) +- [x] Sqlite(Dapper) +- [x] Dapper -协议文件均存放在目录addons\EGFramework\License_Third_Part下面 +#### 文件存储支持 -## 1.使用框架 +- [x] FTP +- [x] LocalFile +- [ ] Sftp +- [ ] WebDav -添加using,并继承接口IEGFramework,即可使用该框架了。 +# 二、框架简介 -以下以一个EGSave的例子,来展示一下框架的存档功能,其他详细用法可以参阅查看Manual-EGSave对应的部分。 +由于该框架使用了较多的Nuget包实现相关的功能,所以安装较为繁琐,同时因为用到较多的扩展方法,提示词可能比较冗余。您可以通过删除对应的Module来定制化自己的框架,也可以新增自己的Module来扩展自己的框架。 -```csharp -using Godot; -using static Godot.GD; -using System.Collections.Generic; -using EGFramework; +如果使用的Nuget包牵扯有侵犯您的许可,请联系作者Mail:1031139173@qq.com,作者尽可能第一时间删除对应的Module功能。 -public partial class EGTest : Node,IEGFramework{ - DataTest dataTest = this.EGSave().GetDataByFile(); - if (dataTest == null) - { - dataTest = new DataTest(); - dataTest.PlayerName = "Player1"; - dataTest.Hp = 100; -        this.EGSave().SetDataToFile(dataTest); - } -} -public class DataTest{ - public string PlayerName; - public int Hp; -} -``` +第三方许可文件均存放在目录addons\EGFramework\License_Third_Part下面 -## 2.直接使用Module +## 1.使用框架 -继承接口IEGFramework时,可以直接通过this.GetModule这个扩展方法直接获取该模块。上面的代码可以通过直接调用的方式改写成如下: +添加using,并继承接口IEGFramework,即可使用该框架了。 ```csharp using Godot; @@ -138,14 +140,7 @@ using System.Collections.Generic; using EGFramework; public partial class EGTest : Node,IEGFramework{ - DataTest dataTest = this.GetModule().GetDataByFile(); - if (dataTest == null) - { - dataTest = new DataTest(); - dataTest.PlayerName = "Player1"; - dataTest.Hp = 100; - this.GetModule().SetDataToFile(dataTest); - } + this.EGSave(); } public class DataTest{ public string PlayerName; @@ -153,80 +148,4 @@ public class DataTest{ } ``` -## 3.扩展框架(编写Module) -编写框架时,要用到IModule这个接口,任何继承了该接口的类均视为Module,可以被上面的方法Get到。 - -同时我们提供了一个简单的实现接口的抽象类EGModule,继承该类等同于实现接口IModule。 - -注意的是,因为C#仅支持单继承,如果您需要继承其他工具类或者是Godot的对应类,您应该使用接口而不是抽象类,具体用法可以参考ProtocolTools.EGProtocolSchedule这个类,它通过一个Node的生命周期的_Process()方法实现了特定线程中的消息拾取到主线程的功能。 - -一个简单的单例对象扩展可以写成如下: - -```csharp -using System; -using System.Collections.Generic; - -namespace EGFramework -{ - public interface IEGObject - { - void RegisterObject(T object_); - T GetObject() where T : class,new(); - - } - public class EGObject : EGModule,IEGObject - { - private IOCContainer ObjectContainer = new IOCContainer(); - public override void Init() - { - - } - - public TObject GetObject() where TObject : class,new() - { - if (!ObjectContainer.self.ContainsKey(typeof(TObject))) - { - this.RegisterObject(new TObject()); - } - return ObjectContainer.Get(); - } - - public void RegisterObject(TObject object_) - { - ObjectContainer.Register(object_); - } - - public bool ContainsObject(){ - return ObjectContainer.self.ContainsKey(typeof(TObject)); - } - } - - public static class CanGetObjectExtension - { - public static T EGGetObject(this IEGFramework self) where T : class,new() - { - return EGArchitectureImplement.Interface.GetModule().GetObject(); - } - } - public static class CanRegisterObjectExtension - { - public static void EGRegisterObject(this IArchitecture self,T object_) where T : class,new() - { - self.GetModule().RegisterObject(object_); - } - public static void EGRegisterObject(this IEGFramework self,T object_) where T : class,new() - { - EGArchitectureImplement.Interface.GetModule().RegisterObject(object_); - } - } - - public static class CanContainsObjectExtension{ - public static bool EGContainsObject(this IEGFramework self) - { - return EGArchitectureImplement.Interface.GetModule().ContainsObject(); - } - } - -} -``` diff --git a/addons/EGFramework/Module/ProtocolTools/EGModbus.cs b/addons/EGFramework/Module/OtherTools/EGModbus.cs similarity index 100% rename from addons/EGFramework/Module/ProtocolTools/EGModbus.cs rename to addons/EGFramework/Module/OtherTools/EGModbus.cs