Browse Source

Update ReadMe

master
jkpete 3 months ago
parent
commit
0c6eefdd7e
  1. 5
      Example/UsingTest/Script/EGSaveTest.cs
  2. 231
      ReadMe.md
  3. 0
      addons/EGFramework/Module/OtherTools/EGModbus.cs

5
Example/UsingTest/Script/EGSaveTest.cs

@ -47,7 +47,8 @@ namespace EGFramework.Examples.Test{ @@ -47,7 +47,8 @@ namespace EGFramework.Examples.Test{
public void TestProcess(){
this.EGEnabledProtocolTool<EGProcess>();
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{ @@ -234,7 +235,7 @@ namespace EGFramework.Examples.Test{
{
try
{
GD.Print(protocolData);
GD.Print("[String]"+protocolData);
// GD.Print("[Bytes]"+protocolBytes);
return true;
}

231
ReadMe.md

@ -5,8 +5,10 @@ @@ -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 @@ @@ -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`,<b>本项目Godot版本可能并非最新</b>,但作者会尽可能的升级至最新版的Godot,在此之间请按照如下方式进行框架的集成工作,如果您有购买Rider或者其他编码工具可以根据自己的喜好来替代VSCode。
## 2.VSCode 插件安装
@ -30,15 +32,29 @@ @@ -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
<ItemGroup>
<PackageReference Include="System.IO.Ports" Version="8.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.1" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" />
<PackageReference Include="WebDav.Client" Version="2.8.0" />
<PackageReference Include="MQTTnet" Version="4.3.3.952" />
<PackageReference Include="Makaretu.Dns.Multicast" Version="0.27.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="8.0.0" />
<PackageReference Include="LiteDB" Version="5.0.21" />
<PackageReference Include="BACnet" Version="2.0.4" />
<PackageReference Include="MySql.Data" Version="9.1.0" />
<PackageReference Include="Dapper" Version="2.1.35" />
<PackageReference Include="SSH.NET" Version="2024.2.0" />
<PackageReference Include="StackExchange.Redis" Version="2.8.31" />
<PackageReference Include="FluentFTP" Version="52.1.0" />
</ItemGroup>
```
- System.Text.Encoding.CodePages(ProtocolTools目录下均有使用)
首次编译确保计算机可以联网,并可以连接该网站[NuGet Gallery | Home](https://www.nuget.org/)
注意:这些Nuget包仅为目前框架版本所用,后续可能会有新的Nuget包导入,会在此处列出。
@ -48,88 +64,74 @@ @@ -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
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.1" />
```
#### 异步处理支持
使用案例(保存数据=>保存单一数据,目前来看该功能仍需改进):
- [x] FileStream
- [x] Process
```csharp
public partial class EGSaveTest : Node,IEGFramework
{
public override void _Ready()
{
TestSqlite();
}
public void TestSqlite(){
// string result = this.EGSqlite().CreateTable<SqliteBackpackItem>();
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<DataTest>();
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; @@ -138,14 +140,7 @@ using System.Collections.Generic;
using EGFramework;
public partial class EGTest : Node,IEGFramework{
DataTest dataTest = this.GetModule<EGSave>().GetDataByFile<DataTest>();
if (dataTest == null)
{
dataTest = new DataTest();
dataTest.PlayerName = "Player1";
dataTest.Hp = 100;
this.GetModule<EGSave>().SetDataToFile(dataTest);
}
this.EGSave();
}
public class DataTest{
public string PlayerName;
@ -153,80 +148,4 @@ public class DataTest{ @@ -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>(T object_);
T GetObject<T>() where T : class,new();
}
public class EGObject : EGModule,IEGObject
{
private IOCContainer ObjectContainer = new IOCContainer();
public override void Init()
{
}
public TObject GetObject<TObject>() where TObject : class,new()
{
if (!ObjectContainer.self.ContainsKey(typeof(TObject)))
{
this.RegisterObject(new TObject());
}
return ObjectContainer.Get<TObject>();
}
public void RegisterObject<TObject>(TObject object_)
{
ObjectContainer.Register(object_);
}
public bool ContainsObject<TObject>(){
return ObjectContainer.self.ContainsKey(typeof(TObject));
}
}
public static class CanGetObjectExtension
{
public static T EGGetObject<T>(this IEGFramework self) where T : class,new()
{
return EGArchitectureImplement.Interface.GetModule<EGObject>().GetObject<T>();
}
}
public static class CanRegisterObjectExtension
{
public static void EGRegisterObject<T>(this IArchitecture self,T object_) where T : class,new()
{
self.GetModule<EGObject>().RegisterObject(object_);
}
public static void EGRegisterObject<T>(this IEGFramework self,T object_) where T : class,new()
{
EGArchitectureImplement.Interface.GetModule<EGObject>().RegisterObject(object_);
}
}
public static class CanContainsObjectExtension{
public static bool EGContainsObject<T>(this IEGFramework self)
{
return EGArchitectureImplement.Interface.GetModule<EGObject>().ContainsObject<T>();
}
}
}
```

0
addons/EGFramework/Module/ProtocolTools/EGModbus.cs → addons/EGFramework/Module/OtherTools/EGModbus.cs

Loading…
Cancel
Save