菜单

配置系统

相关源文件

Shadowsocks Windows 中的配置系统负责存储、加载和管理所有应用程序设置,包括代理服务器配置、应用程序偏好设置和运行时选项。这个中心系统确保设置在应用程序会话之间保持持久性,并为所有组件提供一个一致的接口来与配置数据进行交互。

有关使用配置的 ShadowsocksController 的信息,请参见核心组件:ShadowsocksController。有关服务器管理详情,请参见服务器管理

配置结构

配置类

来源:shadowsocks-csharp/Model/Configuration.cs shadowsocks-csharp/Model/Server.cs

配置系统围绕两个主要类构建

  1. Configuration 类:包含应用程序所有设置的中心类。

    • 位于 Model/Configuration.cs
    • 包含一个 Server 对象列表
    • 包括应用程序行为的属性(启用、全局模式等)
    • 处理配置的加载和保存
  2. Server 类:表示单个代理服务器配置。

    • 位于 Model/Server.cs
    • 包含服务器连接详情(主机名、端口、密码、加密方法)
    • 包括对插件和服务器备注的支持

关键配置属性

属性类型描述
configsList<Server>配置的代理服务器列表
indexint当前选中服务器的索引(如果使用策略则为 -1)
strategy字符串服务器选择策略名称(如果未使用策略则为 null)
enabledbool代理是否启用
globalbool是否使用全局代理模式(而非 PAC 模式)
localPortint代理监听的本地端口
portableModebool应用程序是否以便携模式运行
shareOverLanbool是否允许其他设备使用此代理
pacUrl字符串PAC 文件的 URL
onlineConfigSourceList<string>在线服务器配置源的 URL 列表

配置文件

配置存储在名为 gui-config.json 的 JSON 文件中。在便携模式下,此文件位于应用程序目录中。在非便携模式下,它存储在用户的 AppData 文件夹中。

默认配置

当应用程序首次启动或配置文件缺失时,将创建具有以下默认值的配置

来源:shadowsocks-csharp/Model/Configuration.cs63-110

配置生命周期

加载和保存

来源:shadowsocks-csharp/Model/Configuration.cs161-276

  1. 加载:应用程序启动时,ShadowsocksController 使用静态方法 Configuration.Load() 加载配置,该方法会

    • 检查配置文件是否存在
    • 将 JSON 文件反序列化为 Configuration 对象
    • 如果文件不存在或无法解析,则返回新的默认配置
  2. 处理:加载后,会调用 Configuration.Process()

    • 验证并修复加载配置中的任何不一致性
    • 为缺失的属性设置默认值
    • 检查版本更改并标记新版本首次运行
    • 检查操作系统 IPv6 支持
    • 处理用户代理字符串
  3. 保存:当设置更改时,Configuration.Save() 方法会

    • 对服务器配置进行排序
    • 将配置序列化为 JSON
    • 将 JSON 写入配置文件

系统交互

来源:shadowsocks-csharp/Controller/ShadowsocksController.cs shadowsocks-csharp/View/ConfigForm.cs shadowsocks-csharp/View/MenuViewController.cs

配置系统与几个关键组件交互

  1. ShadowsocksController:中心控制器,它

    • 加载并保存配置
    • 提供修改配置的方法
    • 在配置更改时触发事件
  2. UI 组件:

    • ConfigForm:提供用于编辑服务器配置和设置的用户界面
    • MenuViewController:根据配置更新系统托盘菜单
  3. 事件系统:当配置更改时,控制器会触发以下事件,例如

    • ConfigChanged:通用配置更改
    • EnableStatusChanged:代理启用/禁用状态更改
    • EnableGlobalChanged:全局模式状态更改
    • ShareOverLANStatusChanged:局域网共享状态更改

服务器配置管理

来源:shadowsocks-csharp/View/ConfigForm.cs138-212 shadowsocks-csharp/Controller/ShadowsocksController.cs287-292

ConfigForm 提供了一个用于管理服务器配置的用户界面,包含以下关键操作

  1. 添加服务器:向列表中添加一个新的默认服务器

  2. 编辑服务器:通过用户界面表单更新服务器属性

  3. 删除服务器:从列表中删除一个服务器

  4. 验证服务器:保存前,验证服务器属性,包括

    • 服务器地址(主机名或 IP)
    • 端口号 (1-65535)
    • 密码(非空)
    • 超时值(> 0 且 <= MaxServerTimeoutSec)
  5. 保存服务器:使用修改后的服务器更新配置

服务器 URL 格式与共享

Shadowsocks 支持通过 URL 字符串导入和导出服务器配置,支持两种格式

  1. 旧版格式(正在逐步淘汰)

    ss://BASE64(method:password@server:port)#remarks
    
  2. SIP002 格式(当前标准)

    ss://BASE64(method:password)@server:port/?plugin=plugin;plugin_opts#remarks
    

Server.GetURL() 方法生成这些用于共享的 URL,而 Server.ParseURL() 在导入时解析它们。

来源:shadowsocks-csharp/Model/Server.cs75-119 shadowsocks-csharp/Model/Server.cs183-249

在线配置

来源:shadowsocks-csharp/Controller/Service/OnlineConfigResolver.cs

应用程序可以从在线源检索服务器配置

  1. 在线源:URL 存储在配置中的 onlineConfigSource 列表中

  2. 更新过程:

    • UpdateOnlineConfig(url):从特定 URL 更新服务器
    • UpdateAllOnlineConfig():从源列表中的所有 URL 更新服务器
  3. 实现:

    • OnlineConfigResolver.GetOnline(url):从 URL 检索并解析服务器列表
    • 每个检索到的服务器都在其 group 属性中标记了源 URL
    • 更新后,服务器会进行排序,分组的服务器会保持在一起

配置验证

配置系统包含对各种设置的验证

  1. 服务器验证:在 Configuration.CheckServer()

    • 服务器主机名或 IP (CheckServer())
    • 端口号 (CheckPort())
    • 密码 (CheckPassword())
    • 超时值 (CheckTimeout())
  2. 本地端口验证:在 Configuration.CheckLocalPort()

    • 必须是有效的端口号 (1-65535)
    • 不能是 8123(保留给 PAC 服务器)
  3. Geosite 分组验证:在 Configuration.ValidateGeositeGroupList()

    • 检查配置的 geosite 分组是否存在
    • 如果任何配置的分组无效,则重置为默认值

来源:shadowsocks-csharp/Model/Configuration.cs145-155 shadowsocks-csharp/Model/Configuration.cs351-382

关键配置方法

Configuration 类提供了几个关键方法

方法目的
Configuration.Load()从文件加载配置或创建默认配置
Configuration.Process()验证并处理加载的配置
Configuration.Save()将配置保存到文件
GetCurrentServer()返回当前选中的服务器
CheckServer()验证服务器配置
AddDefaultServerOrServer()向配置中添加一个新服务器

来源:shadowsocks-csharp/Model/Configuration.cs128-134 shadowsocks-csharp/Model/Configuration.cs161-183 shadowsocks-csharp/Model/Configuration.cs189-241 shadowsocks-csharp/Model/Configuration.cs247-276

UI 中的配置

配置系统通过以下方式与用户界面紧密集成

  1. ConfigForm:提供用于编辑服务器配置和应用程序设置的用户界面

    • 将服务器加载到列表视图中
    • 提供用于编辑服务器属性的表单字段
    • 保存前验证输入
  2. MenuViewController:使用配置更新系统托盘菜单

    • 更新菜单中的服务器列表
    • 根据当前设置更新复选标记
    • 提供用于切换设置的菜单项

当配置更改时,用户界面通过 ShadowsocksController 的事件进行更新。

来源:shadowsocks-csharp/View/ConfigForm.cs418-437 shadowsocks-csharp/View/MenuViewController.cs350-366

便携模式

配置系统支持在便携模式下运行应用程序

  • 启用时,配置文件存储在应用程序目录中
  • 禁用时,配置文件存储在用户的 AppData 文件夹中
  • 更改此设置需要重新启动应用程序

便携模式设置通过 ConfigForm 中的用户界面进行控制。

来源:shadowsocks-csharp/View/ConfigForm.cs433-434 shadowsocks-csharp/View/ConfigForm.Designer.cs504-507