开发状态
大约 4 分钟
开发状态
RemoteCI 当前版本为 v0.3.2(插件 0.3.2.0、手表 0.3.2、服务端 0.3.2)。三端已按协议 v2 对齐,仓库配置了 CI 构建与自动化测试;尚未完成真机端到端验收。
已实现(v0.3.1)
- 服务端:ASP.NET Core Identity、SQLite、PBKDF2 密码哈希、1 小时访问令牌、30 天可撤销设备会话和完整 Razor WebUI。
- 权限:管理员固定拥有全部权限(127);普通用户默认只查看当前课程,可附加 WebUI、人员管理、发送与清除通知、老师来了、换课、主界面与电源控制。
- 同步:服务端是账号与权限唯一真源,插件通过 WebSocket 自动同步不含密码的授权镜像;镜像离线超过 24 小时后只允许课程展示。
- 局域网:使用设备会话派生的验证器完成一次性 HMAC 挑战认证,不发送密码或云端访问令牌。
- 课表:状态按秒推送,七日课表独立低频同步;插件连接时自动拉取,WebUI 与空课表手表页支持手动拉取,WebUI 可持久化设置定时拉取周期;支持交换或替换课程,并用修订号防止并发覆盖。
- 通知:由 ClassIsland 正式通知提供方显示自定义通知,成功后广播;支持提醒强调特效、音效与语音;旁路观察自动化与第三方插件通知。
- 控制:清除提醒、主界面显隐、电源(关机/重启/睡眠/休眠)与音量(0-100、静音)。
- 扩展:其他 ClassIsland 插件可通过扩展注册表注册远程功能,手表按权限显示并执行。
- 界面:手表根画布按系统屏幕形状分别适配圆形与矩形设备,矩形屏不再套用圆形遮罩。
- 连接设置:插件每次连云端都会上报全部可用局域网 IP、监听端口和服务状态;服务端转发并缓存,手表保存候选地址、优先逐个直连且记住成功地址。首次登录也可用 UDP 48765 扫描插件并反向获取云地址,密码仍只发往用户确认后的云服务器;鉴权后直接转为局域网连接,不重复建立云端 WebSocket。插件与手表的云端及局域网关闭开关仅在各自开发者菜单显示,普通设置仍可修改端口,手表连接页也可手动修改 IP 和端口。
- 更新:WebUI 与手表可选择正式版/Beta 渠道,并可对同一版本强制重新下载覆盖且拒绝降级;Windows 与裸机 Linux 使用独立更新器规避运行文件锁,Docker 由重启策略拉起,fnOS 由应用商店管理;服务端只替换实际程序集目录,并在 Development 环境禁用在线覆盖,避免污染源码;手表仍只安装不高于已连接 WebUI 的版本,并正确处理 Android 安装确认回调;插件由 ClassIsland 插件市场管理。
测试与 CI
仓库已配置 GitHub Actions:
- dotnet 作业:
dotnet build RemoteCI.slnx -c Release与dotnet test RemoteCI.slnx -c Release --no-build。 - wearos 作业:
./gradlew :app:assembleDebug :app:testDebugUnitTest。
源码中的自动化测试覆盖配对认证、权限、WebSocket 中转、插件网络信息发现/实时转发/缓存、首次登录局域网扫描与云地址引导、手表局域网候选地址与端口、插件连接/手表主动拉取课表、拉取周期持久化、换课、通知标题、扩展路由、圆形/矩形屏幕根画布策略、更新渠道与同版本强制覆盖策略、Windows 锁文件重试、手表版本上限与 Android 安装状态处理。
发布
推送 v* 标签会触发 Release 工作流,产出:
- 服务端:linux-x64 与 win-x64 压缩包(
RemoteCI.Server-版本-平台.zip)。 - 插件:
RemoteCI.Plugin-版本.cipx与checksums.md。 - 手表:
RemoteCI.Watch-版本.apk(配置签名密钥时使用 Release 签名)。 - 飞牛 fnOS:
RemoteCI-版本.fpk与ghcr.io/memz-edge01/remoteci多架构镜像。
待真机验收
以下流程需要真机或真实环境完成端到端验证后,文档才能标注为稳定教程:
- 服务端、插件和 Wear OS 客户端在同一版本上完成安装与连接。
- 插件完成一次性配对并保持云端 WebSocket 连接。
- 手表账号登录、令牌续期和会话撤销通过。
- 当前状态与七日课表成功同步,通知与振动正确触发。
- 交换、替换课程、音量、电源和扩展命令按权限返回正确结果。
- 局域网优先与云端回退在真机上通过。
- Docker、HTTPS、自动更新、备份和恢复流程完成实际演练。
- 飞牛 fnOS 真机安装 fpk、向导配置、桌面入口与应用商店升级完成实际演练。