using System.Collections.Generic;
namespace Netch.Models
{
public class Mode
{
///
/// 备注
///
public string Remark;
///
/// 无后缀文件名
///
public string FileName;
///
/// 类型
/// 0. 进程加速
/// 1. TUN/TAP 规则内 IP CIDR 加速
/// 2. TUN/TAP 全局,绕过规则内 IP CIDR
/// 3. HTTP 代理(自动设置到系统代理)
/// 4. Socks5 代理(不自动设置到系统代理)
/// 5. Socks5 + HTTP 代理(不自动设置到系统代理)
///
public int Type = 0;
///
/// 绕过中国(0. 不绕过 1. 绕过)
///
public bool BypassChina = false;
///
/// 规则
///
public List Rule = new List();
///
/// 获取备注
///
/// 备注
public override string ToString()
{
return string.Format("[{0}] {1}", Type + 1, Remark);
}
///
/// 获取模式文件字符串
///
/// 模式文件字符串
public string ToFileString()
{
string FileString;
// 进程模式
if (Type == 0)
{
FileString = $"# {Remark}\r\n";
}
// TUN/TAP 规则内 IP CIDR,无 Bypass China 设置
else if (Type == 1)
{
FileString = $"# {Remark}, {Type}, 0\r\n";
}
// TUN/TAP 全局,绕过规则内 IP CIDR
// HTTP 代理(自动设置到系统代理)
// Socks5 代理(不自动设置到系统代理)
// Socks5 + HTTP 代理(不自动设置到系统代理)
else
{
FileString = $"# {Remark}, {Type}, {(BypassChina ? 1 : 0)}\r\n";
}
foreach (var item in Rule)
{
FileString = $"{FileString}{item}\r\n";
}
// 去除最后两个多余回车符和换行符
FileString = FileString.Substring(0, FileString.Length - 2);
return FileString;
}
///
/// 写入模式文件
///
public void ToFile(string Dir)
{
if (!System.IO.Directory.Exists(Dir))
{
System.IO.Directory.CreateDirectory(Dir);
}
var NewPath = System.IO.Path.Combine(Dir, FileName);
if (System.IO.File.Exists(NewPath + ".txt"))
{
// 重命名该模式文件名
NewPath += "_";
while (System.IO.File.Exists(NewPath + ".txt"))
{
// 循环重命名该模式文件名,直至不重名
NewPath += "_";
}
}
FileName = System.IO.Path.GetFileName(NewPath);
// 加上文件名后缀
NewPath += ".txt";
// 写入到模式文件里
System.IO.File.WriteAllText(NewPath, ToFileString());
}
}
}