386 lines
8.5 KiB
Markdown
386 lines
8.5 KiB
Markdown
|
||
|
||
# 项目组织
|
||
|
||
> 使用语言 Go
|
||
|
||
|
||
|
||
|
||
|
||
> 第一版本需要实现的指令
|
||
|
||
```BASH
|
||
tz status
|
||
tz start
|
||
tz stop
|
||
tz restart
|
||
|
||
tz core list
|
||
tz core add
|
||
tz core remove
|
||
tz core use
|
||
tz core info
|
||
|
||
tz profile list
|
||
tz profile add
|
||
tz profile remove
|
||
tz profile use
|
||
tz profile update
|
||
|
||
tz config build
|
||
tz config check
|
||
|
||
tz node list
|
||
tz node select
|
||
tz node test
|
||
|
||
tz log
|
||
|
||
```
|
||
|
||
> 文件树
|
||
|
||
|
||
|
||
```
|
||
tz/
|
||
├── Cargo.toml
|
||
├── Cargo.lock
|
||
├── rust-toolchain.toml
|
||
├── README.md
|
||
├── LICENSE
|
||
│
|
||
├── src/
|
||
│ ├── main.rs
|
||
│ ├── lib.rs
|
||
│ │
|
||
│ ├── cli/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── args.rs
|
||
│ │ ├── output.rs
|
||
│ │ └── commands/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── status.rs
|
||
│ │ ├── service.rs
|
||
│ │ ├── core.rs
|
||
│ │ ├── profile.rs
|
||
│ │ ├── group.rs
|
||
│ │ ├── node.rs
|
||
│ │ ├── mode.rs
|
||
│ │ ├── tun.rs
|
||
│ │ ├── proxy.rs
|
||
│ │ ├── setting.rs
|
||
│ │ ├── rule.rs
|
||
│ │ ├── connection.rs
|
||
│ │ ├── config.rs
|
||
│ │ ├── log.rs
|
||
│ │ └── diagnose.rs
|
||
│ │
|
||
│ ├── application/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── context.rs
|
||
│ │ └── usecase/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── start.rs
|
||
│ │ ├── stop.rs
|
||
│ │ ├── restart.rs
|
||
│ │ ├── reload.rs
|
||
│ │ ├── switch_core.rs
|
||
│ │ ├── switch_profile.rs
|
||
│ │ ├── update_profile.rs
|
||
│ │ └── select_node.rs
|
||
│ │
|
||
│ ├── domain/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── core.rs
|
||
│ │ ├── profile.rs
|
||
│ │ ├── settings.rs
|
||
│ │ ├── runtime.rs
|
||
│ │ ├── capability.rs
|
||
│ │ ├── group.rs
|
||
│ │ ├── node.rs
|
||
│ │ ├── connection.rs
|
||
│ │ └── error.rs
|
||
│ │
|
||
│ ├── adapter/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── traits.rs
|
||
│ │ ├── registry.rs
|
||
│ │ │
|
||
│ │ ├── mihomo/
|
||
│ │ │ ├── mod.rs
|
||
│ │ │ ├── adapter.rs
|
||
│ │ │ ├── command.rs
|
||
│ │ │ ├── config.rs
|
||
│ │ │ ├── controller.rs
|
||
│ │ │ └── response.rs
|
||
│ │ │
|
||
│ │ └── sing_box/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── adapter.rs
|
||
│ │ ├── command.rs
|
||
│ │ ├── config.rs
|
||
│ │ ├── controller.rs
|
||
│ │ └── response.rs
|
||
│ │
|
||
│ ├── core_manager/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── manager.rs
|
||
│ │ ├── registry.rs
|
||
│ │ ├── package.rs
|
||
│ │ ├── installer.rs
|
||
│ │ └── remover.rs
|
||
│ │
|
||
│ ├── profile/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── manager.rs
|
||
│ │ ├── store.rs
|
||
│ │ ├── fetcher.rs
|
||
│ │ ├── detector.rs
|
||
│ │ └── format/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── clash.rs
|
||
│ │ ├── sing_box.rs
|
||
│ │ └── uri_list.rs
|
||
│ │
|
||
│ ├── config/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── builder.rs
|
||
│ │ ├── overlay.rs
|
||
│ │ ├── effective.rs
|
||
│ │ ├── bypass.rs
|
||
│ │ └── validator.rs
|
||
│ │
|
||
│ ├── runtime/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── manager.rs
|
||
│ │ ├── process.rs
|
||
│ │ ├── pid.rs
|
||
│ │ ├── lock.rs
|
||
│ │ ├── health.rs
|
||
│ │ ├── state.rs
|
||
│ │ └── log.rs
|
||
│ │
|
||
│ ├── platform/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── paths.rs
|
||
│ │ ├── shell.rs
|
||
│ │ ├── system_proxy.rs
|
||
│ │ ├── service.rs
|
||
│ │ └── linux/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── systemd.rs
|
||
│ │ ├── signal.rs
|
||
│ │ ├── tun.rs
|
||
│ │ └── routes.rs
|
||
│ │
|
||
│ ├── storage/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── atomic_file.rs
|
||
│ │ ├── core_store.rs
|
||
│ │ ├── profile_store.rs
|
||
│ │ ├── settings_store.rs
|
||
│ │ └── runtime_store.rs
|
||
│ │
|
||
│ ├── infrastructure/
|
||
│ │ ├── mod.rs
|
||
│ │ ├── command.rs
|
||
│ │ ├── http.rs
|
||
│ │ ├── download.rs
|
||
│ │ ├── checksum.rs
|
||
│ │ └── filesystem.rs
|
||
│ │
|
||
│ └── diagnose/
|
||
│ ├── mod.rs
|
||
│ ├── process.rs
|
||
│ ├── ports.rs
|
||
│ ├── api.rs
|
||
│ ├── config.rs
|
||
│ └── network.rs
|
||
│
|
||
├── assets/
|
||
│ ├── defaults/
|
||
│ │ └── settings.toml
|
||
│ ├── templates/
|
||
│ │ ├── mihomo.yaml
|
||
│ │ └── sing-box.json
|
||
│ └── systemd/
|
||
│ └── tz.service
|
||
│
|
||
├── tests/
|
||
│ ├── cli.rs
|
||
│ ├── start_stop.rs
|
||
│ ├── profile.rs
|
||
│ └── adapter.rs
|
||
│
|
||
├── testdata/
|
||
│ ├── profiles/
|
||
│ │ ├── clash.yaml
|
||
│ │ └── sing-box.json
|
||
│ ├── api/
|
||
│ │ ├── mihomo-proxies.json
|
||
│ │ ├── mihomo-connections.json
|
||
│ │ └── mihomo-version.json
|
||
│ └── bin/
|
||
│ └── fake-core
|
||
│
|
||
├── docs/
|
||
│ ├── scope.md
|
||
│ ├── domain-model.md
|
||
│ ├── workflows.md
|
||
│ ├── adapter-contract.md
|
||
│ └── filesystem-layout.md
|
||
│
|
||
├── packaging/
|
||
│ ├── systemd/
|
||
│ └── completions/
|
||
│
|
||
└── scripts/
|
||
├── install.sh
|
||
├── uninstall.sh
|
||
└── release.sh
|
||
```
|
||
|
||
> 运行树
|
||
|
||
```
|
||
语言 Rust
|
||
异步运行时 Tokio
|
||
CLI clap derive
|
||
序列化 Serde
|
||
HTTP reqwest
|
||
错误类型 thiserror + anyhow
|
||
日志 tracing
|
||
项目配置 TOML
|
||
Clash Profile YAML
|
||
sing-box JSON
|
||
```
|
||
|
||
|
||
|
||
```
|
||
~/.config/tz/
|
||
├── settings.toml
|
||
├── current.toml
|
||
├── bypass.list
|
||
├── profiles/
|
||
│ ├── home/
|
||
│ │ ├── manifest.toml
|
||
│ │ └── source.yaml
|
||
│ └── company/
|
||
│ ├── manifest.toml
|
||
│ └── source.json
|
||
└── overlays/
|
||
├── common.toml
|
||
├── mihomo.yaml
|
||
└── sing-box.json
|
||
|
||
~/.local/share/tz/
|
||
└── cores/
|
||
├── mihomo/
|
||
│ ├── current
|
||
│ └── versions/
|
||
│ └── 1.20.0/
|
||
│ ├── manifest.toml
|
||
│ └── bin/
|
||
│ └── mihomo
|
||
└── sing-box/
|
||
├── current
|
||
└── versions/
|
||
└── 1.x/
|
||
├── manifest.toml
|
||
└── bin/
|
||
└── sing-box
|
||
|
||
~/.local/state/tz/
|
||
├── logs/
|
||
│ ├── tz.log
|
||
│ └── core.log
|
||
├── builds/
|
||
│ ├── effective-mihomo.yaml
|
||
│ └── effective-sing-box.json
|
||
├── history/
|
||
└── runtime-history/
|
||
|
||
~/.cache/tz/
|
||
├── downloads/
|
||
├── subscriptions/
|
||
└── latency/
|
||
|
||
${XDG_RUNTIME_DIR}/tz/
|
||
├── tz.lock
|
||
├── core.pid
|
||
├── runtime.json
|
||
├── effective-config
|
||
└── control.sock
|
||
```
|
||
|
||
|
||
|
||
# rust开发环境
|
||
|
||
```
|
||
Rust + Tokio + clap
|
||
Mihomo
|
||
Clash YAML profile
|
||
start / stop / status / log
|
||
node list / select
|
||
```
|
||
|
||
**现在使用一个 Package,包含一个 Library target 和一个 Binary target。**
|
||
不使用 Workspace,也不使用多 Bin。
|
||
|
||
|
||
|
||
# 开发顺序
|
||
|
||
```
|
||
第一阶段
|
||
├── 路径系统
|
||
├── SettingsStore
|
||
├── CoreRegistry
|
||
├── ProfileStore
|
||
├── MihomoAdapter
|
||
├── RuntimeManager
|
||
├── tz start
|
||
├── tz stop
|
||
├── tz status
|
||
└── tz log
|
||
```
|
||
|
||
|
||
|
||
```
|
||
第二阶段
|
||
├── Mihomo Controller API
|
||
├── group list/select
|
||
├── node list/select/test
|
||
├── mode
|
||
├── reload
|
||
└── profile update
|
||
```
|
||
|
||
```
|
||
第三阶段
|
||
├── sing-box Adapter
|
||
├── Capability 检测
|
||
├── sing-box 配置生成
|
||
├── TUN
|
||
├── system proxy
|
||
└── bypass
|
||
```
|
||
|
||
```
|
||
第四阶段
|
||
├── core install/update
|
||
├── diagnose
|
||
├── connection
|
||
├── completion
|
||
└── 发布与安装脚本
|
||
```
|
||
|
||
|
||
|
||
|
||
|