CodeWF.NetWeaver
CodeWF.NetWeaver 是网络数据包序列化与反序列化的核心库。CodeWF.NetWrapper 构建在它之上,提供 TCP/UDP 帮助类、命令分发,以及文件传输和文件管理能力。
項目組成
| 項目 | 說明 |
|---|---|
CodeWF.NetWeaver |
核心數據包序列化/反序列化庫。 |
CodeWF.NetWrapper |
基于 CodeWF.NetWeaver 的 TCP/UDP Socket 帮助库。 |
SocketTest.Client |
wrapper 功能演示客戶端。 |
SocketTest.Server |
wrapper 功能演示服務端。 |
安裝
僅安裝數據包序列化核心:
dotnet add package CodeWF.NetWeaver
如果需要 tcp/udp 命令分發、文件傳輸或文件管理能力,再安裝封裝層:
dotnet add package CodeWF.NetWrapper
數據包模型
每個數據包由固定頭部和對象正文兩部分組成:
Header
- BufferLen: int
- SystemId: long
- ObjectId: ushort
- ObjectVersion: byte
- UnixTimeMilliseconds: long
Body
- Serialized object payload
可以通过 NetHead 为 DTO 标记协议头信息:
using CodeWF.NetWeaver.Base;
[NetHead(10, 1)]
public class ResponseProcessList : INetObject
{
public int TaskId { get; set; }
public int TotalSize { get; set; }
public List<ProcessItem>? Processes { get; set; }
}
基礎用法
序列化:
var netObject = new ResponseProcessList
{
TaskId = 3,
TotalSize = 2,
Processes =
[
new ProcessItem { Pid = 1, Name = "CodeWF.NetWeaver" },
new ProcessItem { Pid = 2, Name = "CodeWF.NetWrapper" }
]
};
var buffer = netObject.Serialize(systemId: 32);
反序列化:
var deserialized = buffer.Deserialize<ResponseProcessList>();
Console.WriteLine($"Process count: {deserialized.Processes?.Count ?? 0}");
CodeWF.NetWrapper
CodeWF.NetWrapper 负责 TCP/UDP 通信,并将原始数据包转换为强类型命令:
using CodeWF.EventBus;
using CodeWF.NetWrapper.Commands;
using CodeWF.NetWrapper.Helpers;
var server = new TcpSocketServer();
await server.StartAsync("Server", "0.0.0.0", 8888);
EventBus.Default.Subscribe<SocketCommand>(async (sender, command) =>
{
await Task.CompletedTask;
});
文件傳輸與文件管理
TcpSocketClient 和 TcpSocketServer 提供文件浏览、创建目录、删除路径、上传、下载等 API。传输流程会沿用同一个 TaskId,便于把请求、响应、分块数据、确认、拒绝和完成消息关联起来。
重要行為:
- 文件塊大小為 64 kb。
- 上傳和下載都支持基於偏移量的斷點續傳。
- 文件完成後執行 sha-256 校驗。
- 设置
FileSaveDirectory后,服务端会限制文件管理操作只能发生在托管根目录内。