Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Architecture

qingchenyouforcc edited this page Apr 24, 2026 · 6 revisions

架构概览

本页帮助你快速建立对代码库的正确心智模型,尤其是启动链路、运行时分层和"改什么去哪里"。

先看整体结构

NeurolingsCE/
├── src/app/ # Qt 应用层
│ ├── core/ # 基础能力:资源、命令、本地控制、HTTP、音效、引擎
│ ├── runtime/ # 运行时:生命周期、环境同步、导入流程
│ └── ui/ # 管理器界面、桌宠窗口、菜单、对话框、部件
├── src/platform/Platform/ # 平台抽象层
├── include/shijima-qt/ # 公共头文件
├── src/app/core/shijima-engine/ # 集成的桌宠模拟引擎
├── libshimejifinder/ # 导入与解压
├── cpp-httplib/ # HTTP 库
├── ElaWidgetTools/ # GUI 组件库
├── translations/ # 当前翻译资源
└── src/docs/HTTP-API.md # 接口真源文档

启动链路

当前仓库的主入口在 src/app/main.cc,启动流程可以概括成这样:

main()
 -> 判断是否是 CLI 调用
 -> CLI 调用:进入 QCoreApplication + shijimaRunCli()
 -> GUI 调用:Platform::initialize()
 -> 创建 QApplication
 -> 检查本地运行时是否已存在
 -> 创建 ShijimaManager
 -> 显示管理器窗口或进入 CLI runtime 模式

关键点:

  • shijimaShouldRunCli() 会把 CLI 和 GUI 分流开。
  • GUI 侧的单实例检查已经优先走本地控制接口 ping,而不是旧文档里那种"CLI 依赖 HTTP"叙述。
  • 当 CLI 需要控制运行时但当前没有现成实例时,运行时可以被自动拉起。

src/app 的真实分层

src/app/core/

放基础能力和跨界面共用能力。

常见内容:

  • assets/:模板资源、图片与缓存装载
  • audio/:SoundEffectManager
  • commands/:桌宠命令服务
  • http/:ShijimaHttpApi
  • localipc/:本地控制接口
  • shijima-engine/:集成的引擎源码

assets/ 里还包含 .mascot 包处理逻辑。新格式下,安装目录保存的是单文件 Name.mascot,运行时会验证 info.json,再解压到应用缓存目录读取 XML、图片、音效和可选的 bubble_context.txt

src/app/runtime/

ShijimaManager 的运行时职责切片。

常见文件:

  • ManagerLifecycle.cc
  • ManagerMascotRuntime.cc
  • ManagerEnvironmentSync.cc
  • ManagerImportWorkflow.cc

这些文件负责桌宠生成与销毁、环境同步、模板导入、运行时调度等。

src/app/ui/

放界面和交互实现。

常见部分:

  • ManagerWindowSetup.cc
  • ManagerUiActions.cc
  • ManagerTrayIcon.cc
  • ui/mascot/:桌宠窗口绘制与交互
  • ui/menus/:右键菜单
  • ui/dialogs/:检查器、许可证、进度框
  • ui/widgets/:如气泡组件

核心对象

ShijimaManager

它是整个应用的中心管理器,也是大多数"全局行为"的落点。

主要职责:

  • 维护模板列表与已生成桌宠
  • 驱动运行时 tick
  • 响应导入流程
  • 协调 GUI、HTTP、本地控制接口与平台层

如果你要改"应用级行为",通常先从 ShijimaManager 相关文件看起。

ShijimaWidget

每个桌宠实例对应一个窗口部件。

典型职责拆分:

  • MascotWidgetRendering.cc:绘制与命中区域
  • MascotWidgetInteraction.cc:拖拽、点击、菜单
  • MascotWidgetLifecycle.cc:生命周期相关逻辑

shijima-engine

位于 src/app/core/shijima-engine/,负责:

  • 解析 actions.xmlbehaviors.xml
  • 维护动作与行为状态
  • 进行 25 FPS 节奏下的模拟推进
  • 执行脚本与物理行为

这个引擎已经集成进仓库,因此本项目允许直接在这里做本地修复。

mascot 生命周期和 tick 机制

可以把桌宠运行理解成一条持续循环:

加载模板
 -> 生成桌宠实例
 -> 每 tick 同步环境
 -> 推进引擎状态
 -> 重绘窗口
 -> 响应交互 / HTTP / CLI / 本地控制命令

仓库说明和代码都把 tick 频率固定在 25 FPS,这是当前设计基础。

平台抽象层做什么

平台相关代码统一放在 src/platform/Platform/

目录包含:

  • Windows/
  • Linux/
  • macOS/
  • Stub/

平台层负责的不是业务逻辑,而是这些底层差异:

  • 应用初始化前后的平台特定设置
  • 窗口在桌面上的展示方式
  • 前台窗口观测
  • Linux KDE / GNOME 的专用集成
  • macOS 的 Accessibility 相关接入

公共头文件主要有:

  • Platform.hpp
  • ActiveWindow.hpp
  • ActiveWindowObserver.hpp

本地控制接口、HTTP API、CLI 三者关系

当前项目里这三者分工已经比较清晰:

  • HTTP API:给外部程序提供 REST 接口。
  • 本地控制接口:运行时与 CLI 的本机控制通道。
  • NeurolingsCE-cli:给脚本、agent 和终端用户用的命令行前端。

理解这一点很重要,因为旧文档容易让人误以为 CLI 只是 HTTP 的一层包装;现在不是这样。

想改什么,先看哪里

需求 建议先看
启动与单实例 src/app/main.ccsrc/app/core/localipc/
CLI 参数与输出 src/app/cli.ccsrc/app/cli/
HTTP 接口 src/app/core/http/ShijimaHttpApi.ccsrc/docs/HTTP-API.md
模板导入 src/app/runtime/ManagerImportWorkflow.cc
.mascot 包验证、安装、迁移 src/app/core/assets/MascotPackage.cc
桌宠渲染与交互 src/app/ui/mascot/
右键菜单 src/app/ui/menus/
平台相关行为 src/platform/Platform/
构建与打包 CMakeLists.txtMakefilecmake/src/packaging/

更细的代码定位建议请看 仓库导览

代码组织约定

  • 源文件扩展名统一使用 .cc
  • 头文件以 #pragma once 为主。
  • 项目头文件使用 #include "shijima-qt/..."
  • 引擎头文件使用 #include <shijima/...>
  • 平台层头文件使用 #include "Platform/..."
  • 大类通常按"主体 + 职责"拆分,例如 ManagerImportWorkflow.ccMascotWidgetRendering.cc

下一步阅读

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /