{"id":16210011,"url":"https://github.com/bian-sh/et-network-module","last_synced_at":"2025-03-16T11:30:47.613Z","repository":{"id":59985356,"uuid":"532995595","full_name":"Bian-Sh/ET-Network-Module","owner":"Bian-Sh","description":"从 ET6.0  中精简出来的网络模块（TCP ），可以与 ET Server 通信。","archived":false,"fork":false,"pushed_at":"2023-11-05T09:25:55.000Z","size":5865,"stargazers_count":76,"open_issues_count":0,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-27T08:19:01.706Z","etag":null,"topics":["et","network","socket","tcp"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Bian-Sh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-09-05T17:23:23.000Z","updated_at":"2024-12-06T03:42:18.000Z","dependencies_parsed_at":"2023-01-20T10:00:21.876Z","dependency_job_id":"ce842cde-198d-40f3-8496-0362ea43e0d5","html_url":"https://github.com/Bian-Sh/ET-Network-Module","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bian-Sh%2FET-Network-Module","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bian-Sh%2FET-Network-Module/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bian-Sh%2FET-Network-Module/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Bian-Sh%2FET-Network-Module/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Bian-Sh","download_url":"https://codeload.github.com/Bian-Sh/ET-Network-Module/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243814864,"owners_count":20352037,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["et","network","socket","tcp"],"created_at":"2024-10-10T10:34:47.614Z","updated_at":"2025-03-16T11:30:46.643Z","avatar_url":"https://github.com/Bian-Sh.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 是什么？\n\n\u003e ET-Network-Module\n\n一个从 ET 6.0 中梳理出来的多次重构了的，使用  asmdef 模块化了的网络模块\n\n# 为什么？\n\n* 方便在不需要接入 ET 前端的情况下与 ET 后台对接。\n* 方便在不喜仰或是不习惯 ET 前端的情况下与 ET 后台对接。\n* 方便用户与自己喜欢的任意框架缝合\n* 在无 MVC(S) 、无热重载需求的；只期望简单的、按原有直觉开发的情景下有用\n* 学习目的：学习大型游戏网络框架，学习重构网络框架\n\n# 有什么？\n\n* 一个仅供测试的、原滋原味的 ET6.0 server \n* 保留 Google Protobuf net + TCP + RPC/非 RPC 等特性，并与 ET Server 正常通信\n* 使用 Unity Assembly Definition File 拆分的网络模块，详见下图：\n\n![](doc/arc.png)\n\n* 简化了的、适配 MonoBehaviour 的非 RPC 消息处理器生成、订阅工作流\n* 提供了 .proto 转 .cs 的一键生成工具\n\n# 没有什么？\n\n* 没有了 ET Entity 的概念\n* 没有 ECS 各种跳跃式的分工程开发模式，回到了常规的 Unity 开发\n\n# 如何安装？\n\n1. Clone 本项目，将文件夹 **ET Network Module** 放置到自己的工程\n2. 如果之前有脚本调用 OuterMessage.cs 将该脚本所在文件夹改名，加上一个波浪号（方便网络模块完成编译）\n3. 删除  **ET Network Module/Generated** 文件夹，删除示例消息和消息处理器\n4. 与后台约定，将 outermessage.proto 中 ping 消息体置顶 （* 重要 *）\n5. 使用 **Tools/.proto 转 .cs 实体类** 先生成网络消息类\n\n![](doc/proto2cs.png)\n\n6. 紧接着使用 **Tools/生成非 RPC 消息处理器** 生成非 RPC 网络消息处理器类型\n\n![](doc/handlerGenerator.png)\n\n7. 将第 2 步中修改改回来即完成安装。\n\nPS:生成的实体类与 handler 同位于 Generated 文件夹,用一个单独的程序集管理，减小编译时长，Generated 文件夹随时可一键更新.\n\n# 如何使用？\n\n## ET 服务器？\n\n本项目提供的 et 服务器执行文件是 ET 6.0 原汁原味编译所得，不曾修改，并且只供测试，为了减少项目复杂度故而不提供 ET 6.0 服务器源码\n\n但是，你可以从 [ET](https://github.com/egametang/ET) 仓库对应的 分支去下载，如果  [ET](https://github.com/egametang/ET)  不再提供，实属不可控因素了。\n\n请注意：请务必保证服务器端同步使用本项目规则下的 .proto 文件 (为了模块化，ping消息内置，故而 ping 消息在 .proto 置顶)\n\n## 非 RPC 消息处理器的使用\n\n我们简化了事件的监听与取消订阅，使用如下方式即可获取关心的网络消息：\n\n使用：``MessageHandler.ListenSignal`` 监听关心的非 RPC 网络消息\n\n使用：``MessageHandler.RemoveSignal`` 删除对指定网络消息的监听\n\n使用：`` using static MessageHandler；`` 语法糖像原生方法那样监听网络消息\n\n```\nusing ET;\nusing UnityEngine;\nusing static MessageHandler;\npublic class HandlerUsageCase : MonoBehaviour\n{\n    private void Start()\n    {\n        ListenSignal\u003cM2C_CreateMyUnit\u003e(OnMyUnitCreated);\n    }\n    private void OnMyUnitCreated(Session arg1, M2C_CreateMyUnit arg2)\n    {\n        // 撰写你自己的逻辑\n    }\n    private void OnDestroy()\n    {\n        RemoveSignal\u003cM2C_CreateMyUnit\u003e(OnMyUnitCreated);\n    }\n}\n```\n\n## RPC 消息的使用\n\n原滋原味的 RPC 使用风格，下面摘抄部分登录逻辑够熟悉不？\n\n```\n Session forgate = NetKcpComponent.Create(NetworkHelper.ToIPEndPoint(address));\n R2C_Login r2CLogin = (R2C_Login)await forgate.Call(new C2R_Login() { Account=username.text, Password=password.text });\n forgate?.Dispose();\n```\n\n# 一些动画演示\n\n\u003e 动图演示的是消息类以及非 rpc 消息处理器代码生成\n\n![](doc/generatecode.gif)\n\n\u003e 演示连接 Gate 服务器、登录服务器、心跳（Ping）、进入map\n\n![](doc/demo.gif)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbian-sh%2Fet-network-module","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbian-sh%2Fet-network-module","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbian-sh%2Fet-network-module/lists"}