mirror of https://github.com/2dust/v2rayN
parent
26c9cd4d27
commit
c1354600c7
|
@ -44,6 +44,7 @@ namespace v2rayN.Forms
|
|||
Application.ApplicationExit += (sender, args) =>
|
||||
{
|
||||
Utils.ClearTempPath();
|
||||
statistics.Close();
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -52,70 +53,70 @@ namespace v2rayN.Forms
|
|||
ConfigHandler.LoadConfig(ref config);
|
||||
v2rayHandler = new V2rayHandler();
|
||||
v2rayHandler.ProcessEvent += v2rayHandler_ProcessEvent;
|
||||
statistics = new StatisticsHandler(config,
|
||||
(ulong totalUp, ulong totalDown, ulong up, ulong down, List<Mode.ServerStatistics> statistics) =>
|
||||
statistics = new StatisticsHandler(config, UpdateHandler);
|
||||
}
|
||||
|
||||
private void UpdateHandler(ulong totalUp, ulong totalDown, ulong up, ulong down, List<Mode.ServerStatistics> statistics)
|
||||
{
|
||||
double up_amount = 0.0, down_amount;
|
||||
string up_unit = "", down_unit;
|
||||
|
||||
up /= (ulong) (config.statisticsFreshRate / 1000f);
|
||||
down /= (ulong) (config.statisticsFreshRate / 1000f);
|
||||
|
||||
Utils.ToHumanReadable(up, out up_amount, out up_unit);
|
||||
Utils.ToHumanReadable(down, out down_amount, out down_unit);
|
||||
up_unit += "/s";
|
||||
down_unit += "/s";
|
||||
|
||||
toolSslBlank4.Text = string.Format(
|
||||
"{4}: {0:f2} {1} | {5}: {2:f2} {3}",
|
||||
up_amount,
|
||||
up_unit,
|
||||
down_amount,
|
||||
down_unit,
|
||||
UIRes.I18N("uploadSpeed"),
|
||||
UIRes.I18N("downloadSpeed")
|
||||
);
|
||||
|
||||
List<string[]> datas = new List<string[]>();
|
||||
for (int i = 0; i < config.vmess.Count; i++)
|
||||
{
|
||||
string totalUp_ = string.Empty,
|
||||
totalDown_ = string.Empty,
|
||||
todayUp_ = string.Empty,
|
||||
todayDown_ = string.Empty;
|
||||
var index = statistics.FindIndex(item_ => (config.vmess[i].address == item_.address && config.vmess[i].port == item_.port && config.vmess[i].path == item_.path));
|
||||
if (index != -1)
|
||||
{
|
||||
double up_amount = 0.0, down_amount;
|
||||
string up_unit = "", down_unit;
|
||||
|
||||
up /= (ulong)(config.statisticsFreshRate / 1000f);
|
||||
down /= (ulong)(config.statisticsFreshRate / 1000f);
|
||||
|
||||
Utils.ToHumanReadable(up, out up_amount, out up_unit);
|
||||
Utils.ToHumanReadable(down, out down_amount, out down_unit);
|
||||
up_unit += "/s";
|
||||
down_unit += "/s";
|
||||
|
||||
toolSslBlank4.Text = string.Format(
|
||||
"{4}: {0:f2} {1} | {5}: {2:f2} {3}",
|
||||
up_amount,
|
||||
up_unit,
|
||||
down_amount,
|
||||
down_unit,
|
||||
UIRes.I18N("uploadSpeed"),
|
||||
UIRes.I18N("downloadSpeed")
|
||||
);
|
||||
|
||||
|
||||
List<string[]> datas = new List<string[]>();
|
||||
for (int i= 0; i < config.vmess.Count; i++)
|
||||
Func<ulong, string> human_fy = (amount) =>
|
||||
{
|
||||
string totalUp_ = string.Empty,
|
||||
totalDown_ = string.Empty,
|
||||
todayUp_ = string.Empty,
|
||||
todayDown_ = string.Empty;
|
||||
var index = statistics.FindIndex(item_ => (config.vmess[i].address == item_.address && config.vmess[i].port == item_.port));
|
||||
if (index != -1)
|
||||
{
|
||||
Func<ulong, string> human_fy = (amount) =>
|
||||
{
|
||||
double result;
|
||||
string unit;
|
||||
Utils.ToHumanReadable(amount, out result, out unit);
|
||||
return $"{string.Format("{0:f2}", result)}{unit}";
|
||||
};
|
||||
totalUp_ = human_fy(statistics[index].totalUp);
|
||||
totalDown_ = human_fy(statistics[index].totalDown);
|
||||
todayUp_ = human_fy(statistics[index].todayUp);
|
||||
todayDown_ = human_fy(statistics[index].todayDown);
|
||||
}
|
||||
double result;
|
||||
string unit;
|
||||
Utils.ToHumanReadable(amount, out result, out unit);
|
||||
return $"{string.Format("{0:f2}", result)}{unit}";
|
||||
};
|
||||
totalUp_ = human_fy(statistics[index].totalUp);
|
||||
totalDown_ = human_fy(statistics[index].totalDown);
|
||||
todayUp_ = human_fy(statistics[index].todayUp);
|
||||
todayDown_ = human_fy(statistics[index].todayDown);
|
||||
}
|
||||
|
||||
datas.Add(new string[] { totalUp_, totalDown_, todayUp_, todayDown_ });
|
||||
}
|
||||
datas.Add(new string[] { totalUp_, totalDown_, todayUp_, todayDown_});
|
||||
}
|
||||
|
||||
lvServers.Invoke((MethodInvoker)delegate
|
||||
{
|
||||
lvServers.SuspendLayout();
|
||||
for (int i =0; i< datas.Count; i++)
|
||||
{
|
||||
lvServers.Items[i].SubItems[7].Text = datas[i][0];
|
||||
lvServers.Items[i].SubItems[8].Text = datas[i][1];
|
||||
lvServers.Items[i].SubItems[9].Text = datas[i][2];
|
||||
lvServers.Items[i].SubItems[10].Text = datas[i][3];
|
||||
}
|
||||
lvServers.ResumeLayout();
|
||||
});
|
||||
});
|
||||
lvServers.Invoke((MethodInvoker)delegate
|
||||
{
|
||||
lvServers.SuspendLayout();
|
||||
for (int i =0; i<datas.Count; i++)
|
||||
{
|
||||
lvServers.Items[i].SubItems[7].Text = datas[i][0];
|
||||
lvServers.Items[i].SubItems[8].Text = datas[i][1];
|
||||
lvServers.Items[i].SubItems[9].Text = datas[i][2];
|
||||
lvServers.Items[i].SubItems[10].Text = datas[i][3];
|
||||
}
|
||||
lvServers.ResumeLayout();
|
||||
});
|
||||
}
|
||||
|
||||
private void MainForm_VisibleChanged(object sender, EventArgs e)
|
||||
|
@ -155,7 +156,9 @@ namespace v2rayN.Forms
|
|||
}
|
||||
if(e.CloseReason == CloseReason.ApplicationExitCall)
|
||||
{
|
||||
ConfigHandler.SaveConfig(ref config);
|
||||
statistics.saveToFile();
|
||||
statistics.Close();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -519,6 +522,14 @@ namespace v2rayN.Forms
|
|||
break;
|
||||
case Keys.T:
|
||||
// Speed test selected servers
|
||||
if (!config.sysAgentEnabled || config.listenerType != 1)
|
||||
{
|
||||
UI.Show(UIRes.I18N("NeedHttpGlobalProxy"));
|
||||
return;
|
||||
}
|
||||
|
||||
UI.Show(UIRes.I18N("SpeedServerTips"));
|
||||
|
||||
GetLvSelectedIndex();
|
||||
ServerSpeedTest();
|
||||
break;
|
||||
|
|
|
@ -125,9 +125,9 @@
|
|||
<data name="splitContainer1.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 17</value>
|
||||
</data>
|
||||
<metadata name="cmsLv.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<data name="cmsLv.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>327, 17</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="menuAddVmessServer.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>447, 22</value>
|
||||
</data>
|
||||
|
@ -401,12 +401,12 @@
|
|||
<data name=">>splitContainer1.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="notifyMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<data name="notifyMain.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<metadata name="cmsMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
</data>
|
||||
<data name="cmsMain.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>137, 17</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="cmsMain.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||
<value>NoControl</value>
|
||||
</data>
|
||||
|
@ -494,12 +494,12 @@
|
|||
<data name="notifyMain.Visible" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<metadata name="bgwPing.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<data name="bgwPing.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>232, 17</value>
|
||||
</metadata>
|
||||
<metadata name="bgwScan.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
</data>
|
||||
<data name="bgwScan.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>498, 17</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="groupBox1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
</data>
|
||||
|
@ -560,9 +560,9 @@
|
|||
<data name=">>txtMsgBox.ZOrder" xml:space="preserve">
|
||||
<value>0</value>
|
||||
</data>
|
||||
<metadata name="ssMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<data name="ssMain.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>603, 17</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="toolSslSocksPortLab.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>55, 17</value>
|
||||
</data>
|
||||
|
@ -609,7 +609,7 @@
|
|||
<value>31, 17</value>
|
||||
</data>
|
||||
<data name="toolSslBlank4.Text" xml:space="preserve">
|
||||
<value>N/A</value>
|
||||
<value>Disabled</value>
|
||||
</data>
|
||||
<data name="ssMain.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>3, 151</value>
|
||||
|
@ -686,9 +686,9 @@
|
|||
<data name=">>panel1.ZOrder" xml:space="preserve">
|
||||
<value>4</value>
|
||||
</data>
|
||||
<metadata name="tsMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<data name="tsMain.TrayLocation" type="System.Drawing.Point, System.Drawing">
|
||||
<value>409, 17</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="toolStripSeparator4.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>6, 56</value>
|
||||
</data>
|
||||
|
@ -736,13 +736,13 @@
|
|||
</data>
|
||||
<data name="tsbReload.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd
|
||||
QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X
|
||||
jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY
|
||||
6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3
|
||||
NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY
|
||||
B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg==
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||
wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM
|
||||
mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY
|
||||
FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr
|
||||
flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh
|
||||
VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh
|
||||
6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsbReload.ImageAlign" type="System.Drawing.ContentAlignment, System.Drawing">
|
||||
|
@ -852,9 +852,9 @@
|
|||
</data>
|
||||
<data name="tsbClose.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/
|
||||
GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg==
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
|
||||
wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA
|
||||
8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC
|
||||
</value>
|
||||
</data>
|
||||
<data name="tsbClose.ImageTransparentColor" type="System.Drawing.Color, System.Drawing">
|
||||
|
@ -890,12 +890,12 @@
|
|||
<data name=">>tsMain.ZOrder" xml:space="preserve">
|
||||
<value>5</value>
|
||||
</data>
|
||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
</metadata>
|
||||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
</data>
|
||||
<data name="$this.TrayHeight" type="System.Int32, mscorlib">
|
||||
<value>65</value>
|
||||
</metadata>
|
||||
</data>
|
||||
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
|
||||
<value>6, 12</value>
|
||||
</data>
|
||||
|
|
|
@ -456,4 +456,7 @@
|
|||
<data name="menuRemoveDuplicateServer.Text" xml:space="preserve">
|
||||
<value>移除重复的服务器</value>
|
||||
</data>
|
||||
<data name="toolSslBlank4.Text" xml:space="preserve">
|
||||
<value>未启用</value>
|
||||
</data>
|
||||
</root>
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Text;
|
||||
using System.Windows.Forms;
|
||||
|
@ -326,6 +327,7 @@ namespace v2rayN.Forms
|
|||
|
||||
config.allowLANConn = chkAllowLANConn.Checked;
|
||||
|
||||
var lastEnableStatistics = config.enableStatistics;
|
||||
config.enableStatistics = chkEnableStatistics.Checked;
|
||||
|
||||
uint days = 0;
|
||||
|
@ -336,6 +338,15 @@ namespace v2rayN.Forms
|
|||
|
||||
config.statisticsFreshRate = (int)cbFreshrate.SelectedValue;
|
||||
|
||||
if(lastEnableStatistics != config.enableStatistics)
|
||||
{
|
||||
/// https://stackoverflow.com/questions/779405/how-do-i-restart-my-c-sharp-winform-application
|
||||
// Shut down the current app instance.
|
||||
Application.Exit();
|
||||
|
||||
// Restart the app passing "/restart [processId]" as cmd line args
|
||||
Process.Start(Application.ExecutablePath, "/restart " + Process.GetCurrentProcess().Id);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ namespace v2rayN.Handler
|
|||
DeleteExpiredLog();
|
||||
foreach (var server in config.vmess)
|
||||
{
|
||||
var statistic = new ServerStatistics(server.remarks, server.address, server.port, 0, 0, 0, 0);
|
||||
var statistic = new ServerStatistics(server.remarks, server.address, server.port, server.path, 0, 0, 0, 0);
|
||||
Statistic.Add(statistic);
|
||||
}
|
||||
|
||||
|
@ -211,7 +211,7 @@ namespace v2rayN.Handler
|
|||
overallWriter.WriteLine($"DOWN {string.Format("{0:f2}", down_amount)}{down_unit} {TotalDown}");
|
||||
foreach(var s in Statistic)
|
||||
{
|
||||
overallWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.totalUp} {s.totalDown}");
|
||||
overallWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.path} {s.totalUp} {s.totalDown}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -230,7 +230,7 @@ namespace v2rayN.Handler
|
|||
dailyWriter.WriteLine($"LastUpdate {DateTime.Now.ToLongDateString()} {DateTime.Now.ToLongTimeString()}");
|
||||
foreach (var s in Statistic)
|
||||
{
|
||||
dailyWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.todayUp} {s.todayDown}");
|
||||
dailyWriter.WriteLine($"* {s.name} {s.address} {s.port} {s.path} {s.todayUp} {s.todayDown}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -282,8 +282,9 @@ namespace v2rayN.Handler
|
|||
var name = datas[1];
|
||||
var address = datas[2];
|
||||
var port = int.Parse(datas[3]);
|
||||
var totalUp = ulong.Parse(datas[4]);
|
||||
var totalDown = ulong.Parse(datas[5]);
|
||||
var path = datas[4];
|
||||
var totalUp = ulong.Parse(datas[5]);
|
||||
var totalDown = ulong.Parse(datas[6]);
|
||||
|
||||
var index = Statistic.FindIndex(item => item.address == address && item.port == port);
|
||||
if (index != -1)
|
||||
|
@ -293,7 +294,7 @@ namespace v2rayN.Handler
|
|||
}
|
||||
else
|
||||
{
|
||||
var s = new Mode.ServerStatistics(name, address, port, totalUp, totalDown, 0, 0);
|
||||
var s = new Mode.ServerStatistics(name, address, port, path, totalUp, totalDown, 0, 0);
|
||||
Statistic.Add(s);
|
||||
}
|
||||
}
|
||||
|
@ -325,8 +326,9 @@ namespace v2rayN.Handler
|
|||
var name = datas[1];
|
||||
var address = datas[2];
|
||||
var port = int.Parse(datas[3]);
|
||||
var todayUp = ulong.Parse(datas[4]);
|
||||
var todayDown = ulong.Parse(datas[5]);
|
||||
var path = datas[4];
|
||||
var todayUp = ulong.Parse(datas[5]);
|
||||
var todayDown = ulong.Parse(datas[6]);
|
||||
|
||||
var index = Statistic.FindIndex(item => item.address == address && item.port == port);
|
||||
if (index != -1)
|
||||
|
@ -336,7 +338,7 @@ namespace v2rayN.Handler
|
|||
}
|
||||
else
|
||||
{
|
||||
var s = new Mode.ServerStatistics(name, address, port, 0, 0, todayUp, todayDown);
|
||||
var s = new Mode.ServerStatistics(name, address, port, path, 0, 0, todayUp, todayDown);
|
||||
Statistic.Add(s);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,17 +11,19 @@ namespace v2rayN.Mode
|
|||
public string name;
|
||||
public string address;
|
||||
public int port;
|
||||
public string path;
|
||||
public ulong totalUp;
|
||||
public ulong totalDown;
|
||||
public ulong todayUp;
|
||||
public ulong todayDown;
|
||||
|
||||
public ServerStatistics() { }
|
||||
public ServerStatistics(string name, string addr, int port, ulong totalUp, ulong totalDown, ulong todayUp, ulong todayDown)
|
||||
public ServerStatistics(string name, string addr, int port, string path, ulong totalUp, ulong totalDown, ulong todayUp, ulong todayDown)
|
||||
{
|
||||
this.name = name;
|
||||
this.address = addr;
|
||||
this.port = port;
|
||||
this.path = path;
|
||||
this.totalUp = totalUp;
|
||||
this.totalDown = totalDown;
|
||||
this.todayUp = todayUp;
|
||||
|
|
|
@ -28,6 +28,25 @@ namespace v2rayN
|
|||
|
||||
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
|
||||
|
||||
|
||||
var args = Environment.GetCommandLineArgs();
|
||||
bool _isRestart = args.Length > 1 && args[1] == "/restart";
|
||||
if (_isRestart)
|
||||
{
|
||||
try
|
||||
{
|
||||
// get old process and wait UP TO 5 secs then give up!
|
||||
int _restartProcessId = int.Parse(args[2]);
|
||||
Process oldProcess = Process.GetProcessById(_restartProcessId);
|
||||
oldProcess.WaitForExit();
|
||||
}
|
||||
catch
|
||||
{
|
||||
// the process did not exist - probably already closed!
|
||||
//TODO: --> LOG
|
||||
}
|
||||
}
|
||||
|
||||
Process instance = RunningInstance();
|
||||
if (instance == null)
|
||||
{
|
||||
|
@ -43,7 +62,7 @@ namespace v2rayN
|
|||
}
|
||||
else
|
||||
{
|
||||
UI.Show("v2rayN is already running(v2rayN已经运行)");
|
||||
UI.Show($"v2rayN is already running(v2rayN已经运行){args[1]} {args[2]}");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -316,7 +316,7 @@ namespace v2rayN
|
|||
var list = new List<Mode.VmessItem>();
|
||||
foreach (var item in source)
|
||||
{
|
||||
if(!list.Exists(i => item.address == i.address && item.port == i.port))
|
||||
if(!list.Exists(i => item.address == i.address && item.port == i.port && item.path == i.path))
|
||||
{
|
||||
list.Add(item);
|
||||
}
|
||||
|
|
|
@ -14,4 +14,8 @@
|
|||
<PropertyGroup>
|
||||
<EnableSecurityDebugging>false</EnableSecurityDebugging>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
|
||||
<StartAction>Project</StartAction>
|
||||
<StartArguments>/restart 1001</StartArguments>
|
||||
</PropertyGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue