using System.Collections.Generic; using System.Linq; namespace Netch.Models { public class Mode { /// /// 备注 /// public string Remark; /// /// 文件相对路径(必须是存在的文件) /// public string RelativePath; /// /// 无后缀文件名 /// public string FileName; /// /// 类型 /// 0. Socks5 + 进程加速 /// 1. Socks5 + TUN/TAP 规则内 IP CIDR 加速 /// 2. Socks5 + TUN/TAP 全局,绕过规则内 IP CIDR /// 3. Socks5 + HTTP 代理(设置到系统代理) /// 4. Socks5 代理(不设置到系统代理) /// 5. Socks5 + HTTP 代理(不设置到系统代理) /// public int Type = 0; /// /// 绕过中国(0. 不绕过 1. 绕过) /// public bool BypassChina = false; /// /// 规则 /// public readonly List Rule = new List(); /// /// 获取备注 /// /// 备注 public override string ToString() { return $"[{Type + 1}] {Remark}"; } /// /// 获取模式文件字符串 /// /// 模式文件字符串 public string ToFileString() { string fileString; switch (Type) { case 0: // 进程模式 fileString = $"# {Remark}"; break; case 1: // TUN/TAP 规则内 IP CIDR,无 Bypass China 设置 fileString = $"# {Remark}, {Type}, 0"; break; default: fileString = $"# {Remark}, {Type}, {(BypassChina ? 1 : 0)}"; break; } fileString += Global.EOF; fileString = Rule.Aggregate(fileString, (current, item) => $"{current}{item}{Global.EOF}"); // 去除最后的行尾符 fileString = fileString.Substring(0, fileString.Length - 2); return fileString; } public string TypeToString() { return Type switch { 0 => "Process", 1 => "TUNTAP", 2 => "TUNTAP", 3 => "SYSTEM", 4 => "S5", 5 => "S5+HTTP", _ => "ERROR", }; } } }