mirror of
https://github.com/snltty/linker.git
synced 2025-12-18 01:16:46 +08:00
sync
This commit is contained in:
@@ -11,7 +11,7 @@ namespace linker.tun.test
|
||||
static void Main(string[] args)
|
||||
{
|
||||
linkerTunDeviceAdapter = new LinkerTunDeviceAdapter();
|
||||
linkerTunDeviceAdapter.Initialize("linker0", new LinkerTunDeviceCallbackTCPUDP());
|
||||
linkerTunDeviceAdapter.Initialize("linker0", new LinkerTunDeviceCallbackICMP());
|
||||
linkerTunDeviceAdapter.Setup(IPAddress.Parse("192.168.55.2"), 24, 1416);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(linkerTunDeviceAdapter.Error))
|
||||
|
||||
@@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<History>True|2024-08-02T15:25:37.2353291Z||;</History>
|
||||
<History>True|2024-08-15T07:24:49.6191991Z||;True|2024-08-02T23:25:37.2353291+08:00||;</History>
|
||||
<LastFailureDetails />
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -23,7 +23,12 @@
|
||||
<strong v-if="scope.row.isSelf"> - (<el-icon><StarFilled /></el-icon> 本机) </strong>
|
||||
</p>
|
||||
<p class="flex">
|
||||
<span>{{ scope.row.IP }}</span>
|
||||
<template v-if="scope.row.showip">
|
||||
<span class="ipaddress"><span>{{ scope.row.IP }}</span> <el-icon @click="scope.row.showip=flase"><View /></el-icon></span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span class="ipaddress"><span>{{ scope.row.IP.replace(/(\d+\.\d+\.\d+\.\d+)/,'***.***.***.***') }}</span> <el-icon @click="scope.row.showip=true"><Hide /></el-icon></span>
|
||||
</template>
|
||||
<span class="flex-1"></span>
|
||||
<a href="javascript:;" class="download" @click="handleUpdate(scope.row)" :title="updateText(scope.row)" :class="updateColor(scope.row)">
|
||||
<span>
|
||||
@@ -57,7 +62,7 @@
|
||||
<script>
|
||||
import { injectGlobalData } from '@/provide';
|
||||
import { computed, ref,h } from 'vue';
|
||||
import {StarFilled,Search,Download,Loading,CircleCheck} from '@element-plus/icons-vue'
|
||||
import {StarFilled,Search,Download,Loading,CircleCheck,View,Hide} from '@element-plus/icons-vue'
|
||||
import { ElMessage, ElMessageBox,ElSelect,ElOption } from 'element-plus';
|
||||
import { confirm, exit } from '@/apis/updater';
|
||||
import { useUpdater } from './updater';
|
||||
@@ -65,7 +70,7 @@ import { useTuntap } from './tuntap';
|
||||
|
||||
export default {
|
||||
emits:['edit','refresh'],
|
||||
components:{StarFilled,Search,Download,Loading,CircleCheck},
|
||||
components:{StarFilled,Search,Download,Loading,CircleCheck,View,Hide},
|
||||
setup(props,{emit}) {
|
||||
|
||||
const name = ref(sessionStorage.getItem('search-name') || '');
|
||||
@@ -199,6 +204,10 @@ img.system{
|
||||
margin-right:.4rem
|
||||
}
|
||||
|
||||
.ipaddress{
|
||||
span,.el-icon{vertical-align:middle}
|
||||
}
|
||||
|
||||
|
||||
a.download{
|
||||
margin-left:.6rem
|
||||
|
||||
@@ -29,6 +29,7 @@ export const provideDevices = () => {
|
||||
res.List[j].showDel = machineId.value != res.List[j].MachineId && res.List[j].Connected == false;
|
||||
res.List[j].showReboot = res.List[j].Connected;
|
||||
res.List[j].isSelf = machineId.value == res.List[j].MachineId;
|
||||
res.List[j].showip = false;
|
||||
}
|
||||
devices.page.List = res.List;
|
||||
for (let i = 0; i < devices.page.List.length; i++) {
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
using linker.config;
|
||||
using linker.startup;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace linker.plugins.turn
|
||||
{
|
||||
public sealed class TurnStartup : IStartup
|
||||
{
|
||||
public string Name => "turn";
|
||||
|
||||
public bool Required => false;
|
||||
|
||||
public StartupLevel Level => StartupLevel.Normal;
|
||||
|
||||
public string[] Dependent => ["messenger", "tunnel", "signin", "serialize", "config"];
|
||||
|
||||
public StartupLoadType LoadType => StartupLoadType.Normal;
|
||||
|
||||
public void AddClient(ServiceCollection serviceCollection, FileConfig config, Assembly[] assemblies)
|
||||
{
|
||||
}
|
||||
|
||||
public void AddServer(ServiceCollection serviceCollection, FileConfig config, Assembly[] assemblies)
|
||||
{
|
||||
}
|
||||
|
||||
public void UseClient(ServiceProvider serviceProvider, FileConfig config, Assembly[] assemblies)
|
||||
{
|
||||
}
|
||||
|
||||
public void UseServer(ServiceProvider serviceProvider, FileConfig config, Assembly[] assemblies)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
using MemoryPack;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace linker.plugins.turn.config
|
||||
{
|
||||
[MemoryPackable]
|
||||
public sealed partial class TunnelsInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// 谁
|
||||
/// </summary>
|
||||
public string MachineId { get; set; }
|
||||
/// <summary>
|
||||
/// 跟谁打洞成功过
|
||||
/// </summary>
|
||||
public List<string> MachineIds { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,98 +0,0 @@
|
||||
using linker.config;
|
||||
using linker.plugins.signin.messenger;
|
||||
using linker.libs;
|
||||
using MemoryPack;
|
||||
using linker.plugins.messenger;
|
||||
using linker.plugins.turn.config;
|
||||
|
||||
namespace linker.plugins.turn.messenger
|
||||
{
|
||||
public sealed class TurnClientMessenger : IMessenger
|
||||
{
|
||||
private readonly MessengerSender messengerSender;
|
||||
|
||||
public TurnClientMessenger(MessengerSender messengerSender)
|
||||
{
|
||||
this.messengerSender = messengerSender;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public sealed class TurnServerMessenger : IMessenger
|
||||
{
|
||||
private readonly MessengerSender messengerSender;
|
||||
private readonly SignCaching signCaching;
|
||||
public TurnServerMessenger(MessengerSender messengerSender, SignCaching signCaching)
|
||||
{
|
||||
this.messengerSender = messengerSender;
|
||||
this.signCaching = signCaching;
|
||||
}
|
||||
|
||||
|
||||
[MessengerId((ushort)TurnMessengerIds.TunnelsForward)]
|
||||
public void TunnelsForward(IConnection connection)
|
||||
{
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
|
||||
IEnumerable<Task<MessageResponeInfo>> tasks = signCaching.Get(cache.GroupId)
|
||||
.Where(c => c.MachineId != connection.Id && c.Connected)
|
||||
.Select(c => messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = c.Connection,
|
||||
MessengerId = (ushort)TurnMessengerIds.Tunnels,
|
||||
Timeout = 3000
|
||||
}));
|
||||
|
||||
Task.WhenAll(tasks).ContinueWith(async (result) =>
|
||||
{
|
||||
List<TunnelsInfo> results = tasks.Where(c => c.Result.Code == MessageResponeCodes.OK)
|
||||
.Select(c => new TunnelsInfo { MachineId = c.Result.Connection.Id, MachineIds = MemoryPackSerializer.Deserialize<List<string>>(c.Result.Data.Span) })
|
||||
.ToList();
|
||||
await messengerSender.ReplyOnly(new MessageResponseWrap
|
||||
{
|
||||
Connection = connection,
|
||||
Payload = MemoryPackSerializer.Serialize(results),
|
||||
RequestId = requestid,
|
||||
}).ConfigureAwait(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
[MessengerId((ushort)TurnMessengerIds.PortMapsForward)]
|
||||
public void PortMapsForward(IConnection connection)
|
||||
{
|
||||
if (signCaching.TryGet(connection.Id, out SignCacheInfo cache))
|
||||
{
|
||||
uint requestid = connection.ReceiveRequestWrap.RequestId;
|
||||
|
||||
IEnumerable<Task<MessageResponeInfo>> tasks = signCaching.Get(cache.GroupId)
|
||||
.Where(c => c.MachineId != connection.Id && c.Connected)
|
||||
.Select(c => messengerSender.SendReply(new MessageRequestWrap
|
||||
{
|
||||
Connection = c.Connection,
|
||||
MessengerId = (ushort)TurnMessengerIds.PortMaps,
|
||||
Timeout = 3000
|
||||
}));
|
||||
|
||||
Task.WhenAll(tasks).ContinueWith(async (result) =>
|
||||
{
|
||||
List<string> results = tasks.Where(c => c.Result.Code == MessageResponeCodes.OK && c.Result.Data.Span.SequenceEqual(Helper.TrueArray))
|
||||
.Select(c => c.Result.Connection.Id)
|
||||
.ToList();
|
||||
await messengerSender.ReplyOnly(new MessageResponseWrap
|
||||
{
|
||||
Connection = connection,
|
||||
Payload = MemoryPackSerializer.Serialize(results),
|
||||
RequestId = requestid,
|
||||
}).ConfigureAwait(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
namespace linker.plugins.turn.messenger
|
||||
{
|
||||
public enum TurnMessengerIds : ushort
|
||||
{
|
||||
_ = 2700,
|
||||
|
||||
TunnelsForward = 2701,
|
||||
Tunnels = 2702,
|
||||
|
||||
PortMapsForward = 2703,
|
||||
PortMaps = 2704,
|
||||
|
||||
None = 2799
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user