ShadowsocksController 是 Shadowsocks Windows 客户端的中央编排组件。它协调所有主要子系统,管理配置,处理代理设置,并维护事件驱动通信基础设施,使客户端能够正常运行。有关整体架构信息,请参阅 架构。
ShadowsocksController 类作为 Shadowsocks Windows 客户端的骨干,承担以下关键职责:
来源:shadowsocks-csharp/Controller/ShadowsocksController.cs21-90
来源:shadowsocks-csharp/Controller/ShadowsocksController.cs21-90 shadowsocks-csharp/View/MenuViewController.cs21-80
来源:shadowsocks-csharp/Controller/ShadowsocksController.cs69-89 shadowsocks-csharp/View/MenuViewController.cs83-94
ShadowsocksController 初始化过程如下:
Start() 方法
Reload() 初始化组件来源:shadowsocks-csharp/Controller/ShadowsocksController.cs92-110 shadowsocks-csharp/Controller/ShadowsocksController.cs114-142
来源:shadowsocks-csharp/Controller/ShadowsocksController.cs167-255
Stop() 方法
stopped 标志来源:shadowsocks-csharp/Controller/ShadowsocksController.cs143-165
ShadowsocksController 管理应用程序配置(_config),其中包含:
关键配置相关方法
SaveConfig(Configuration):保存配置并重新加载组件GetCurrentServer():返回当前选定的服务器GetCurrentConfiguration():返回当前配置对象SaveServers(List<Server>, int, bool):保存服务器列表、本地端口和便携模式设置来源:shadowsocks-csharp/Controller/ShadowsocksController.cs257-263 shadowsocks-csharp/Model/Configuration.cs11-162
ShadowsocksController 提供了控制代理行为的方法
ToggleEnable(bool):启用或禁用代理系统ToggleGlobal(bool):在全局和 PAC 模式之间切换SaveProxy(ForwardProxyConfig):保存前向代理配置UpdateSystemProxy():更新 Windows 系统代理设置当用户与系统托盘菜单交互时,这些方法由 MenuViewController 调用。
来源:shadowsocks-csharp/Controller/ShadowsocksController.cs312-340 shadowsocks-csharp/View/MenuViewController.cs600-647
来源:shadowsocks-csharp/Controller/ShadowsocksController.cs312-340 shadowsocks-csharp/View/MenuViewController.cs589-647
ShadowsocksController 管理 PAC(Proxy Auto-Configuration)系统,该系统决定哪些流量应被代理,哪些应直接访问。
PACDaemon 和 PACServer关键 PAC 相关方法
SavePACUrl(string):保存自定义 PAC URLUseOnlinePAC(bool):在本地 PAC 和在线 PAC 之间切换TouchPACFile():打开 PAC 文件进行编辑TouchUserRuleFile():打开用户规则文件进行编辑来源:shadowsocks-csharp/Controller/ShadowsocksController.cs343-417 shadowsocks-csharp/View/MenuViewController.cs808-921
来源:shadowsocks-csharp/Controller/ShadowsocksController.cs343-417 shadowsocks-csharp/View/MenuViewController.cs808-921
ShadowsocksController 提供了管理服务器配置的方法
GetCurrentServer():获取当前选定的服务器GetAServer():使用当前策略获取服务器SaveServers():保存服务器配置SelectServerIndex():通过索引选择服务器SelectStrategy():选择服务器选择策略AddServerBySSURL():从 SS URL 添加服务器来源:shadowsocks-csharp/Controller/ShadowsocksController.cs269-286 shadowsocks-csharp/Controller/ShadowsocksController.cs287-300 shadowsocks-csharp/Controller/ShadowsocksController.cs419-472
该控制器支持 SIP002(单个服务器 SS URL 格式)和 SIP008(在线服务器订阅)规范。
AddServerBySSURL():解析并从 SS URL 添加服务器GetServerURLForCurrentServer():为当前服务器生成 SS URLUpdateOnlineConfig():从在线配置源更新服务器UpdateAllOnlineConfig():更新所有订阅的在线配置SaveOnlineConfigSource():保存在线配置源列表RemoveOnlineConfig():移除特定的在线配置源来源: shadowsocks-csharp/Controller/ShadowsocksController.cs419-472 shadowsocks-csharp/Controller/ShadowsocksController.cs664-731
ShadowsocksController 包含一个用于服务器选择的策略系统
SelectStrategy(string):通过 ID 选择策略GetStrategies():获取可用策略列表GetCurrentStrategy():获取当前选定的策略UpdateInboundCounter() 和 UpdateOutboundCounter():更新策略的流量计数器策略系统支持负载均衡和高可用性等高级服务器选择机制。
来源: shadowsocks-csharp/Controller/ShadowsocksController.cs525-562
ShadowsocksController 管理 SIP003 插件系统
StartPlugin():为当前服务器启动插件StopPlugins():停止所有运行的插件GetPluginLocalEndPointIfConfigured():获取服务器的插件端点ToggleShowPluginOutput():切换插件输出显示SIP003 为 Shadowsocks 添加传输插件提供了一种可扩展的方式。
来源: shadowsocks-csharp/Controller/ShadowsocksController.cs565-618
来源: shadowsocks-csharp/Controller/ShadowsocksController.cs565-618
ShadowsocksController 包含一个用于跟踪和报告网络流量的系统
StartTrafficStatistics():初始化流量跟踪TrafficStatistics():用于计算每秒流量的后台线程TrafficChanged 事件:通知 UI 流量变化InboundCounter 和 OutboundCounter 属性:跟踪入站和出站字节数该系统使 UI 能够显示实时流量信息并更新系统托盘图标。
来源: shadowsocks-csharp/Controller/ShadowsocksController.cs620-660 shadowsocks-csharp/View/MenuViewController.cs313-337
来源: shadowsocks-csharp/Controller/ShadowsocksController.cs620-660 shadowsocks-csharp/View/MenuViewController.cs313-337
虽然 ShadowsocksController 不直接管理 UI 元素,但它提供了 UI 组件用来与核心功能交互的事件系统和方法
MenuViewController 订阅了来自控制器(controller)的事件MenuViewController 会调用控制器上的方法MenuViewController 根据这些事件更新 UI 元素这种关注点分离使得核心功能可以独立于 UI 运行。
来源: shadowsocks-csharp/View/MenuViewController.cs77-109 shadowsocks-csharp/Controller/ShadowsocksController.cs69-89
ShadowsocksController 实现了错误处理和日志记录机制
NLog 进行不同级别的日志记录ReportError() 方法通过 Errored 事件将错误传播到 UIlogger.LogUsefulException() 进行详细的异常日志记录来源: shadowsocks-csharp/Controller/ShadowsocksController.cs264-268 shadowsocks-csharp/Controller/ShadowsocksController.cs475-483
ShadowsocksController 是 Shadowsocks Windows 客户端中的中央协调点。它负责管理配置、控制代理服务、处理系统集成、响应用户操作,并提供一个用于与 UI 通信的事件系统。理解该组件对于了解 Shadowsocks 客户端如何运行以及其各个子系统如何交互至关重要。