mirror of
https://github.com/snltty/linker.git
synced 2025-10-23 17:13:12 +08:00
sync
This commit is contained in:
@@ -21,6 +21,7 @@ namespace linker.libs
|
|||||||
public sealed class OperatingMultipleManager
|
public sealed class OperatingMultipleManager
|
||||||
{
|
{
|
||||||
private readonly ConcurrentDictionary<string, bool> dicOperating = new ConcurrentDictionary<string, bool>();
|
private readonly ConcurrentDictionary<string, bool> dicOperating = new ConcurrentDictionary<string, bool>();
|
||||||
|
private readonly ConcurrentDictionary<uint, bool> dicOperating1 = new ConcurrentDictionary<uint, bool>();
|
||||||
|
|
||||||
public bool StartOperation(string key)
|
public bool StartOperation(string key)
|
||||||
{
|
{
|
||||||
@@ -31,5 +32,13 @@ namespace linker.libs
|
|||||||
dicOperating.TryRemove(key, out _);
|
dicOperating.TryRemove(key, out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool StartOperation(uint key)
|
||||||
|
{
|
||||||
|
return dicOperating1.TryAdd(key, true);
|
||||||
|
}
|
||||||
|
public void StopOperation(uint key)
|
||||||
|
{
|
||||||
|
dicOperating1.TryRemove(key, out _);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,5 +5,8 @@
|
|||||||
<file name="favicon.ico" path="res\favicon.ico" comment="res\favicon.ico"/>
|
<file name="favicon.ico" path="res\favicon.ico" comment="res\favicon.ico"/>
|
||||||
<file name="favicon1.ico" path="res\favicon1.ico" comment="res\favicon1.ico"/>
|
<file name="favicon1.ico" path="res\favicon1.ico" comment="res\favicon1.ico"/>
|
||||||
</folder>
|
</folder>
|
||||||
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false"/>
|
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false">
|
||||||
|
<file name="net.aardio" path="net.aardio" comment="net.aardio"/>
|
||||||
|
<file name="full.aardio" path="full.aardio" comment="full.aardio"/>
|
||||||
|
</folder>
|
||||||
</project>
|
</project>
|
||||||
|
BIN
linker.tray.win/dist/linker.tray.win.exe
vendored
BIN
linker.tray.win/dist/linker.tray.win.exe
vendored
Binary file not shown.
16
linker.tray.win/full.aardio
Normal file
16
linker.tray.win/full.aardio
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import win.ui;
|
||||||
|
/*DSG{{*/
|
||||||
|
var winform = win.form(text="linker 管理(专业)";right=859;bottom=699;border="thin";max=false;min=false;topmost=1)
|
||||||
|
winform.add()
|
||||||
|
/*}}*/
|
||||||
|
|
||||||
|
if(!_WIN10_LATER) import web.view.7; //兼容 Win7 以及之后版本,不支持新版 WebView2 的功能。
|
||||||
|
else import web.view;//支持 Win10 以及之后版本,导入这个就别导入前面的 web.view.7;
|
||||||
|
|
||||||
|
var wb = web.view(winform);
|
||||||
|
wb.enableDevTools(false);
|
||||||
|
wb.go("http://127.0.0.1:1804");
|
||||||
|
|
||||||
|
winform.show();
|
||||||
|
win.loopMessage();
|
||||||
|
return winform;
|
@@ -1,11 +1,13 @@
|
|||||||
import win.ui;
|
import win.ui;
|
||||||
/*DSG{{*/
|
/*DSG{{*/
|
||||||
mainForm = win.form(text="linker tray";right=279;bottom=186;max=false)
|
mainForm = win.form(text="linker tray";right=279;bottom=212;max=false)
|
||||||
mainForm.add(
|
mainForm.add(
|
||||||
btnCheck={cls="button";text="检查安装";left=104;top=130;right=173;bottom=153;z=1};
|
btnCheck={cls="button";text="检查安装";left=8;top=183;right=77;bottom=206;z=1};
|
||||||
btnInstall={cls="button";text="安装服务";left=95;top=23;right=183;bottom=65;z=2};
|
btnInstall={cls="button";text="安装服务";left=99;top=23;right=187;bottom=65;z=2};
|
||||||
btnRun={cls="button";text="运行服务";left=95;top=74;right=183;bottom=113;z=3};
|
btnRun={cls="button";text="运行服务";left=99;top=74;right=187;bottom=113;z=3};
|
||||||
ckAutoStart={cls="checkbox";text="托盘自启动";left=189;top=160;right=269;bottom=177;z=4}
|
btnWebFull={cls="button";text="管理(专业)";left=152;top=135;right=224;bottom=164;z=6};
|
||||||
|
btnWebNet={cls="button";text="管理(简单)";left=66;top=135;right=138;bottom=164;z=5};
|
||||||
|
ckAutoStart={cls="checkbox";text="托盘自启动";left=187;top=186;right=273;bottom=203;z=4}
|
||||||
)
|
)
|
||||||
/*}}*/
|
/*}}*/
|
||||||
|
|
||||||
@@ -92,15 +94,13 @@ mainForm.showPopmenu = function(){
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
mainForm.reStart = function()
|
mainForm.reStart = function(){
|
||||||
{
|
|
||||||
import process.popen;
|
import process.popen;
|
||||||
var prcs = process.popen.cmd("start "+io._exefile+" --task=1");
|
var prcs = process.popen.cmd("start "+io._exefile+" --task=1");
|
||||||
win.quitMessage();
|
win.quitMessage();
|
||||||
mainForm.close();
|
mainForm.close();
|
||||||
}
|
}
|
||||||
mainForm.failureService = function()
|
mainForm.failureService = function(){
|
||||||
{
|
|
||||||
import process.popen;
|
import process.popen;
|
||||||
var prcs = process.popen.cmd("sc failure " + mainForm.serviceName +" reset= 0 actions= restart/3000/restart/3000/restart/3000")
|
var prcs = process.popen.cmd("sc failure " + mainForm.serviceName +" reset= 0 actions= restart/3000/restart/3000/restart/3000")
|
||||||
prcs.readAll();
|
prcs.readAll();
|
||||||
@@ -238,11 +238,19 @@ mainForm.runAsTaskCheck = function(){
|
|||||||
mainForm.ckAutoStart.oncommand = function(id,event){
|
mainForm.ckAutoStart.oncommand = function(id,event){
|
||||||
mainForm.runAsTask(mainForm.ckAutoStart.checked);
|
mainForm.runAsTask(mainForm.ckAutoStart.checked);
|
||||||
}
|
}
|
||||||
mainForm.runAsTaskCommand = function()
|
mainForm.runAsTaskCommand = function(){
|
||||||
{
|
|
||||||
mainForm.runAsTask(!mainForm.ckAutoStart.checked);
|
mainForm.runAsTask(!mainForm.ckAutoStart.checked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mainForm.btnWebNet.oncommand = function(id,event){
|
||||||
|
var netFrm = mainForm.loadForm("/net.aardio");
|
||||||
|
netFrm.show();
|
||||||
|
}
|
||||||
|
mainForm.btnWebFull.oncommand = function(id,event){
|
||||||
|
var fullFrm = mainForm.loadForm("/full.aardio");
|
||||||
|
fullFrm.show();
|
||||||
|
}
|
||||||
|
|
||||||
mainForm.checkService();
|
mainForm.checkService();
|
||||||
mainForm.showPopmenu();
|
mainForm.showPopmenu();
|
||||||
|
|
||||||
|
16
linker.tray.win/net.aardio
Normal file
16
linker.tray.win/net.aardio
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import win.ui;
|
||||||
|
/*DSG{{*/
|
||||||
|
var winform = win.form(text="linker 管理(简单)";right=359;bottom=599;border="thin";max=false;min=false;topmost=1)
|
||||||
|
winform.add()
|
||||||
|
/*}}*/
|
||||||
|
|
||||||
|
if(!_WIN10_LATER) import web.view.7; //兼容 Win7 以及之后版本,不支持新版 WebView2 的功能。
|
||||||
|
else import web.view;//支持 Win10 以及之后版本,导入这个就别导入前面的 web.view.7;
|
||||||
|
|
||||||
|
var wb = web.view(winform);
|
||||||
|
wb.enableDevTools(false);
|
||||||
|
wb.go("http://127.0.0.1:1804/#/net/index.html");
|
||||||
|
|
||||||
|
winform.show();
|
||||||
|
win.loopMessage();
|
||||||
|
return winform;
|
@@ -46,6 +46,18 @@ export default {
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style lang="stylus" scoped>
|
<style lang="stylus" scoped>
|
||||||
|
@media screen and (max-width: 1000px) {
|
||||||
|
body .app-wrap{
|
||||||
|
border:0;
|
||||||
|
height:100%;
|
||||||
|
width 100%;
|
||||||
|
left:0; top:0;
|
||||||
|
right:0;
|
||||||
|
bottom:0;
|
||||||
|
transform:none;
|
||||||
|
max-width:100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
.app-wrap{
|
.app-wrap{
|
||||||
box-sizing:border-box;
|
box-sizing:border-box;
|
||||||
background-color:#fff;
|
background-color:#fff;
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</dt>
|
</dt>
|
||||||
<dd class="tuntap">
|
<dd class="tuntap">
|
||||||
<TuntapShow @edit="handleTuntapEdit" :item="item"></TuntapShow>
|
<TuntapShow v-if="tuntap.list[item.MachineId]" @edit="handleTuntapEdit" :item="item"></TuntapShow>
|
||||||
</dd>
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="page t-c">
|
<div class="page t-c">
|
||||||
<div class="page-wrap t-c">
|
<div class="page-wrap t-c">
|
||||||
<el-pagination small background layout="total,sizes,prev,pager, next" :pager-count="1" :total="devices.page.Count"
|
<el-pagination size="small" background layout="prev,pager, next" :pager-count="5" :total="devices.page.Count"
|
||||||
:page-size="devices.page.Request.Size" :current-page="devices.page.Request.Page"
|
:page-size="devices.page.Request.Size" :current-page="devices.page.Request.Page"
|
||||||
@current-change="handlePageChange" @size-change="handlePageSizeChange" :page-sizes="[10, 20, 50, 100,255]" />
|
@current-change="handlePageChange" @size-change="handlePageSizeChange" :page-sizes="[10, 20, 50, 100,255]" />
|
||||||
</div>
|
</div>
|
||||||
|
@@ -92,9 +92,15 @@ namespace linker.plugins.client
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||||
LoggerHelper.Instance.Info($"connect to signin server :{config.Data.Client.Server}");
|
LoggerHelper.Instance.Info($"connect to signin server:{config.Data.Client.Server}");
|
||||||
|
|
||||||
IPEndPoint ip = NetworkHelper.GetEndPoint(config.Data.Client.Server, 1802);
|
IPEndPoint ip = NetworkHelper.GetEndPoint(config.Data.Client.Server, 1802);
|
||||||
|
if(ip == null)
|
||||||
|
{
|
||||||
|
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||||
|
LoggerHelper.Instance.Error($"get domain ip fail:{config.Data.Client.Server}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (await ConnectServer(ip).ConfigureAwait(false) == false)
|
if (await ConnectServer(ip).ConfigureAwait(false) == false)
|
||||||
{
|
{
|
||||||
|
@@ -578,6 +578,9 @@ namespace linker.plugins.messenger
|
|||||||
userToken = null;
|
userToken = null;
|
||||||
cancellationTokenSource?.Cancel();
|
cancellationTokenSource?.Cancel();
|
||||||
bufferCache.Clear(true);
|
bufferCache.Clear(true);
|
||||||
|
|
||||||
|
//var bytes = new byte[1024];
|
||||||
|
// while (SourceSocket.Receive(bytes) > 0) ;
|
||||||
}
|
}
|
||||||
public override void Disponse(int value = 0)
|
public override void Disponse(int value = 0)
|
||||||
{
|
{
|
||||||
|
@@ -183,6 +183,8 @@ namespace linker.plugins.relay.messenger
|
|||||||
source.Cancel();
|
source.Cancel();
|
||||||
target.Cancel();
|
target.Cancel();
|
||||||
|
|
||||||
|
await Task.Delay(100);
|
||||||
|
|
||||||
source.TargetStream = target.SourceStream;
|
source.TargetStream = target.SourceStream;
|
||||||
source.TargetSocket = target.SourceSocket;
|
source.TargetSocket = target.SourceSocket;
|
||||||
source.TargetNetworkStream = target.SourceNetworkStream;
|
source.TargetNetworkStream = target.SourceNetworkStream;
|
||||||
|
@@ -84,6 +84,7 @@ namespace linker.plugins.relay.transport
|
|||||||
connection.Disponse(7);
|
connection.Disponse(7);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
await Task.Delay(100).ConfigureAwait(false);
|
||||||
ClearSocket(socket);
|
ClearSocket(socket);
|
||||||
|
|
||||||
SslStream sslStream = null;
|
SslStream sslStream = null;
|
||||||
@@ -141,7 +142,7 @@ namespace linker.plugins.relay.transport
|
|||||||
Payload = MemoryPackSerializer.Serialize(relayInfo)
|
Payload = MemoryPackSerializer.Serialize(relayInfo)
|
||||||
}).ConfigureAwait(false);
|
}).ConfigureAwait(false);
|
||||||
connection.Cancel();
|
connection.Cancel();
|
||||||
await Task.Delay(30).ConfigureAwait(false);
|
await Task.Delay(100).ConfigureAwait(false);
|
||||||
ClearSocket(socket);
|
ClearSocket(socket);
|
||||||
_ = WaitSSL(connection, socket, relayInfo).ContinueWith((result) =>
|
_ = WaitSSL(connection, socket, relayInfo).ContinueWith((result) =>
|
||||||
{
|
{
|
||||||
|
@@ -103,21 +103,21 @@ namespace linker.plugins.tuntap.proxy
|
|||||||
uint ip = BinaryPrimitives.ReadUInt32BigEndian(packet.DistIPAddress.Span[^4..]);
|
uint ip = BinaryPrimitives.ReadUInt32BigEndian(packet.DistIPAddress.Span[^4..]);
|
||||||
if (ipConnections.TryGetValue(ip, out ITunnelConnection connection) == false || connection == null || connection.Connected == false)
|
if (ipConnections.TryGetValue(ip, out ITunnelConnection connection) == false || connection == null || connection.Connected == false)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
if(operatingMultipleManager.StartOperation(ip) == false)
|
if (operatingMultipleManager.StartOperation(ip) == false)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
//if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"got packet to {packet.Dist} 1");
|
//if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"got packet to {packet.Dist} 1");
|
||||||
_ = ConnectTunnel(ip).ContinueWith((result,state) =>
|
_ = ConnectTunnel(ip).ContinueWith((result, state) =>
|
||||||
{
|
{
|
||||||
//operatingMultipleManager.StopOperation((uint)state);
|
operatingMultipleManager.StopOperation((uint)state);
|
||||||
if (result.Result != null)
|
if (result.Result != null)
|
||||||
{
|
{
|
||||||
ipConnections.AddOrUpdate((uint)state, result.Result, (a, b) => result.Result);
|
ipConnections.AddOrUpdate((uint)state, result.Result, (a, b) => result.Result);
|
||||||
}
|
}
|
||||||
},ip);
|
}, ip);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"got packet to {packet.Dist} 2")
|
//if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG) LoggerHelper.Instance.Debug($"got packet to {packet.Dist} 2")
|
||||||
|
Reference in New Issue
Block a user