XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEWarframe

【WinUI】基于Warframe游戏本体的公开服务器以及安装器

公开
关注 0 Fork 0 Star 0
UTF-8

三端目录与 XFE WinUI 架构

源码按运行职责拆分,解决方案中的分组与物理路径一致:

Server/
  XFEWarframe.Server/            ServerInteractive 控制台入口
  XFEWarframe.Core/              游戏 API、存档与业务逻辑
  data/                         嵌入程序集的上游静态数据
  Tests/XFEWarframe.Tests/
Client/
  XFEWarframe.Player/            玩家 WinUI 应用
  XFEWarframe.Client/            C# 安装、检测、恢复、启动逻辑
  XFEWarframe.Installer/         C# 命令行安装器
  XFEWarframe.Bridge/            C# NativeAOT 游戏兼容组件
  Tests/XFEWarframe.Client.Tests/
Admin/
  XFEWarframe.Admin/             管理员 WinUI 应用

根目录的 XFEWarframe.slnx 包含全部工程。也可分别打开三端文件夹内的 Server.slnx、Client.slnx、Admin.slnx。

Visual Studio 的启动项目、非打包 WinUI 调试配置和 x64 映射见 调试说明。

模板来源

采用用户确认的本机模板: XFEExtension.NetCore.VSIX/XFEExtension.NetCore.VSIX/ProjectTemplates/XFEApplication (WinUI3).zip。

  • 本机 VSIX 仓库提交:b2dfe0d26a81310ef788eefd5ae41eff7c892f1f。
  • 模板 SHA-256:51CDCDA995C986F1E8EB02A59E839B541222D8275C25B334B901860444730BA1。
  • 模板结构已按 Warframe 功能改写;未保留演示服务、示例页面或空的演示项目。
  • 保留模板的 Apache 2.0 许可,见 许可文件。

两个应用均采用以下实际分层:

位置 职责
App / MainWindow 注册页面及服务、应用生命周期、原生窗口与 DPI
Views/AppShellPage 原生 WinUI TitleBar、NavigationView、Frame、消息与加载服务宿主
Views 独立 XAML 页面;后台代码只绑定 ViewModel、接收导航与控件事件
ViewModels CommunityToolkit ObservableObject、可观察属性、异步命令与页面状态
Interface/Services 业务及交互服务契约
Implements/Services API、客户端安装与启动、文件选择、对话框、配置迁移
Models 共享应用状态和列表数据
Profiles/CrossVersionProfiles XFEProfile 持久化主题及各端偏好
Utilities / Styles 路径、窗口辅助、验证工具、主题资源与控件样式

使用模板的 PageManager 注册页面,使用 ServiceManager 和 GlobalServiceBase 管理服务。页面导航由 INavigationViewService、IAutoNavigationParameterService 承载;消息、对话框和加载状态分别接入 IMessageService、IDialogService、ILoadingService。不只采用相同文件夹名称。

固定依赖为 WinUIHelper 1.2.5(模板的 1.2.x 系列)、Windows App SDK 1.8.260804001、CommunityToolkit.Mvvm 8.4.2、AutoConfig 4.1.2。使用 .NET 10 partial properties;主题属性初值使用完整类型名,以兼容配置生成器生成代码的命名空间。

配置与生命周期

管理员配置位于 %LOCALAPPDATA%/XFEWarframe/Admin/Profiles,玩家配置位于 %LOCALAPPDATA%/XFEWarframe/Player/Profiles。两者互不共享。玩家端首次使用时读取旧 Player/settings.json 并迁移游戏目录和服务器地址,保留旧文件;--settings=<旧配置文件> 可显式导入。

管理员令牌只保存在内存,不写入 Profiles。管理员端只在本地地址下自动读取本地服务配置,远程连接通过设置页输入。玩家工程不引用 Admin、Server 或游戏 Core,不调用管理 API。

玩家端的 AccountPage 与 InventoryPage 使用 IPlayerAccountService / PlayerAccountService、独立的 PlayerAccountState 和各自 ViewModel。可测试的 HTTP 协议客户端位于 XFEWarframe.Client/PlayerPortalClient.cs。账号与游戏存档共用,Bearer 会话独立于游戏 nonce。RememberedAccountStore 通过 Windows 用户数据保护加密登录信息,按服务器地址独立存储;XFEProfile 仅保存邮箱和默认开启的 RememberAccount 选项。关闭记住选项或明确退出会清除相应的加密记录。

关闭玩家窗口会先取消正在执行的安装并等待清理/回滚结束。管理员窗口关闭会停止轮询并释放 HTTP 客户端,独立服务器继续运行。两端关闭时刷新 XFEProfile 的待保存写入。

新启动脚本的服务数据默认在 Server/runtime。旧根目录 runtime 的存档没有自动移动或覆盖,正在运行的旧实例不受影响;继续使用旧存档可传 -Root ./runtime,或在停止旧服务器后自行迁入 Server/runtime。

发布与验证

scripts/Publish.ps1 生成三个运行目录及三个独立 ZIP:

  • Server/Start.cmd:启动 API 控制台服务,数据在同目录的 runtime。
  • Client/Start.cmd:玩家应用;命令行安装器在 Client/Installer,兼容组件在 Client/Bridge。
  • Admin/Start.cmd:管理员应用;连接远程服务器时无需 Server 文件夹,本地启动功能查找同级 Server。

各包保留对应源码、许可证、文档与验证报告,不打包用户存档、管理令牌或个人偏好。

scripts/Smoke-Desktop.ps1 使用临时本地服务器和隔离的 --profile-root,在隐藏窗口中检查全部页面的构造、导航、ViewModel 加载、不同宽度布局、主题和配置保存。不会执行安装、卸载或游戏启动。它不替代真实显示器上的视觉验收。

--verify-ui=<报告路径> 仅用于这项主动触发的验证;正常启动没有测试页面或开发选项。

管理发布与账号交互

管理员新增 MailPage、NewsPage 和各自 ViewModel,复用 IAdminService 调用管理接口。玩家新增 ItemCatalogPage,AccountPage 只展示名片;LoginDialog 与 RegisterDialog 复用 AuthenticationViewModel,弹窗由模板 IDialogService 承载。FooterMenuItems 中显示账号与偏好设置,账号头像与昵称由 PlayerAccountState 共享。权限改变通过可观察状态同步隐藏操作区域。

战甲、普通武器与显赫武器的拖动 MOD 配装共用 Client/SharedUI/ModLoadoutView、EquipmentEditorModel 和编译的 ModLoadoutResources.xaml。原版资源图片由异步 GameAssetImage 显示;数据规则位于 Client/Shared/ModLoadoutRules.cs,服务端保存重复执行相同校验。技能的 AutoSuggestBox 与候选模板共用名称和原版图标。两端只替换 API 传输和账号上下文,不复制配装 UI;详见 配装说明。