mirror of
https://github.com/snltty/linker.git
synced 2025-10-06 17:46:59 +08:00
demo
This commit is contained in:
268
linker.messenger.example/Program.cs
Normal file
268
linker.messenger.example/Program.cs
Normal file
@@ -0,0 +1,268 @@
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.messenger.relay.messenger;
|
||||
using linker.messenger.relay.server;
|
||||
using linker.messenger.relay.server.caching;
|
||||
using linker.messenger.relay.server.validator;
|
||||
using linker.messenger.signin;
|
||||
using linker.messenger.tunnel;
|
||||
using linker.plugins.tunnel;
|
||||
using linker.tunnel.transport;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace linker.messenger.example
|
||||
{
|
||||
internal class Program
|
||||
{
|
||||
public static PublicConfigInfo publicConfigInfo = new PublicConfigInfo();
|
||||
|
||||
static ISerializer serializer;
|
||||
static IMessengerSender messengerSender;
|
||||
static IMessengerResolver messengerResolver;
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
//序列化
|
||||
serializer = new Serializer();
|
||||
|
||||
//信标发送和接受
|
||||
messengerSender = new MessengerSender();
|
||||
messengerResolver = new MessengerResolver(messengerSender);
|
||||
messengerResolver.Initialize(publicConfigInfo.Certificate);
|
||||
}
|
||||
|
||||
static SignCaching signCaching;
|
||||
static SignInArgsTransfer signInArgsTransfer;
|
||||
static ISignInStore signInStore;
|
||||
|
||||
static TunnelExternalResolver tunnelExternalResolver;
|
||||
static TunnelMessengerAdapter tunnelMessengerAdapter;
|
||||
static void Server()
|
||||
{
|
||||
|
||||
//登录相关
|
||||
signInArgsTransfer = new SignInArgsTransfer();
|
||||
//signInArgsTransfer.LoadArgs(new List<ISignInArgs>());
|
||||
signInStore = new SignInStore();
|
||||
signCaching = new SignCaching(signInStore, signInArgsTransfer);
|
||||
SignInServerMessenger signInServerMessenger = new SignInServerMessenger(messengerSender, signCaching, serializer);
|
||||
|
||||
//打洞相关
|
||||
tunnelExternalResolver = new TunnelExternalResolver();
|
||||
TunnelServerMessenger tunnelServerMessenger = new TunnelServerMessenger(messengerSender, signCaching, serializer);
|
||||
|
||||
//中继相关
|
||||
IRelayServerMasterStore relayServerMasterStore = new RelayServerMasterStore();
|
||||
IRelayServerNodeStore relayServerNodeStore = new RelayServerNodeStore();
|
||||
RelayServerNodeTransfer relayServerNodeTransfer = new RelayServerNodeTransfer(serializer, relayServerNodeStore, relayServerMasterStore);
|
||||
RelayServerResolver relayServerResolver = new RelayServerResolver(relayServerNodeTransfer, serializer);
|
||||
IRelayServerCaching relayServerCaching = new RelayServerCachingMemory(serializer);
|
||||
RelayServerMasterTransfer relayServerMasterTransfer = new RelayServerMasterTransfer(relayServerCaching, serializer, relayServerMasterStore);
|
||||
RelayServerReportResolver relayServerReportResolver = new RelayServerReportResolver(relayServerMasterTransfer);
|
||||
//自定义中继验证
|
||||
RelayServerValidatorTransfer relayServerValidatorTransfer = new RelayServerValidatorTransfer();
|
||||
//relayServerValidatorTransfer.LoadValidators(new List<IRelayServerValidator> { });
|
||||
RelayServerMessenger relayServerMessenger = new RelayServerMessenger(messengerSender, signCaching, serializer, relayServerMasterTransfer, relayServerValidatorTransfer);
|
||||
|
||||
//加载这些信标处理器
|
||||
messengerResolver.LoadMessenger(new List<IMessenger>
|
||||
{
|
||||
signInServerMessenger,
|
||||
tunnelServerMessenger,
|
||||
relayServerMessenger
|
||||
});
|
||||
|
||||
//TCP
|
||||
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
||||
socket.Bind(new IPEndPoint(IPAddress.Any, publicConfigInfo.Port));
|
||||
socket.Listen(int.MaxValue);
|
||||
TimerHelper.Async(async () =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
var client = await socket.AcceptAsync();
|
||||
TimerHelper.Async(async () =>
|
||||
{
|
||||
var bytes = new byte[1024];
|
||||
int length = await client.ReceiveAsync(bytes.AsMemory(0, 1));
|
||||
//信标
|
||||
if (bytes[0] == 0)
|
||||
{
|
||||
await messengerResolver.BeginReceiveServer(socket, Helper.EmptyArray);
|
||||
}
|
||||
//外网端口
|
||||
else if (bytes[0] == 1)
|
||||
{
|
||||
await tunnelExternalResolver.Resolve(client, Helper.EmptyArray);
|
||||
}
|
||||
//中继节点报告
|
||||
else if (bytes[0] == 2)
|
||||
{
|
||||
await relayServerReportResolver.Resolve(client, Helper.EmptyArray);
|
||||
}
|
||||
//中继
|
||||
else if (bytes[0] == 3)
|
||||
{
|
||||
await relayServerResolver.Resolve(client, Helper.EmptyArray);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
//UDP
|
||||
Socket socketUdp = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
|
||||
socketUdp.Bind(new IPEndPoint(IPAddress.Any, publicConfigInfo.Port));
|
||||
socketUdp.WindowsUdpBug();
|
||||
TimerHelper.Async(async () =>
|
||||
{
|
||||
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, IPEndPoint.MinPort);
|
||||
byte[] buffer = new byte[1 * 1024 * 1024];
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
{
|
||||
SocketReceiveFromResult result = await socketUdp.ReceiveFromAsync(buffer, SocketFlags.None, endPoint).ConfigureAwait(false);
|
||||
IPEndPoint ep = result.RemoteEndPoint as IPEndPoint;
|
||||
try
|
||||
{
|
||||
await tunnelExternalResolver.Resolve(socketUdp, ep, buffer.AsMemory(0, result.ReceivedBytes));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class PublicConfigInfo
|
||||
{
|
||||
public string MachineId { get; set; }
|
||||
public IConnection SignConnection { get; set; }
|
||||
public IPAddress[] LocalIps { get; set; }
|
||||
public int RouteLevel { get; set; }
|
||||
public X509Certificate2 Certificate { get; set; }
|
||||
public List<TunnelTransportItemInfo> TunnelTransports { get; set; }
|
||||
|
||||
|
||||
public int Port { get; set; } = 12345;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 中继节点信息存储库
|
||||
/// </summary>
|
||||
public sealed class RelayServerNodeStore : IRelayServerNodeStore
|
||||
{
|
||||
public byte Flag => 2;
|
||||
|
||||
public int ServicePort => Program.publicConfigInfo.Port;
|
||||
|
||||
public RelayServerNodeInfo Node => new RelayServerNodeInfo { };
|
||||
|
||||
public void Confirm()
|
||||
{
|
||||
}
|
||||
|
||||
public void SetMaxGbTotalLastBytes(ulong value)
|
||||
{
|
||||
}
|
||||
|
||||
public void SetMaxGbTotalMonth(int month)
|
||||
{
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 中继主机信息存储库
|
||||
/// </summary>
|
||||
public sealed class RelayServerMasterStore : IRelayServerMasterStore
|
||||
{
|
||||
public RelayServerMasterInfo Master => new RelayServerMasterInfo { SecretKey = "snltty" };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 自定义打洞的存储库
|
||||
/// </summary>
|
||||
public sealed class TunnelMessengerAdapterStore : ITunnelMessengerAdapterStore
|
||||
{
|
||||
public IConnection SignConnection => Program.publicConfigInfo.SignConnection;
|
||||
|
||||
public NetworkInfo Network => new NetworkInfo { MachineId = Program.publicConfigInfo.MachineId, LocalIps = Program.publicConfigInfo.LocalIps, RouteLevel = Program.publicConfigInfo.RouteLevel };
|
||||
|
||||
public X509Certificate2 Certificate => Program.publicConfigInfo.Certificate;
|
||||
|
||||
public List<TunnelTransportItemInfo> TunnelTransports => Program.publicConfigInfo.TunnelTransports;
|
||||
|
||||
public TunnelMessengerAdapterStore()
|
||||
{
|
||||
}
|
||||
public bool SetTunnelTransports(List<TunnelTransportItemInfo> list)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 自定义序列化
|
||||
/// </summary>
|
||||
public sealed class Serializer : ISerializer
|
||||
{
|
||||
public T Deserialize<T>(ReadOnlySpan<byte> buffer)
|
||||
{
|
||||
return buffer.GetString().DeJson<T>();
|
||||
}
|
||||
|
||||
public byte[] Serialize<T>(T value)
|
||||
{
|
||||
return value.ToJson().ToBytes();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 自定义登录持久化存储
|
||||
/// </summary>
|
||||
public sealed class SignInStore : ISignInStore
|
||||
{
|
||||
public void Confirm()
|
||||
{
|
||||
}
|
||||
|
||||
public bool Delete(string id)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public SignCacheInfo Find(string id)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public IEnumerable<SignCacheInfo> Find()
|
||||
{
|
||||
return new List<SignCacheInfo>();
|
||||
}
|
||||
|
||||
public string Insert(SignCacheInfo value)
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
public string NewId()
|
||||
{
|
||||
return Guid.NewGuid().ToString();
|
||||
}
|
||||
|
||||
public bool Update(SignCacheInfo value)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
18
linker.messenger.example/linker.messenger.example.csproj
Normal file
18
linker.messenger.example/linker.messenger.example.csproj
Normal file
@@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<EnablePreviewFeatures>true</EnablePreviewFeatures>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\linker.messenger.relay\linker.messenger.relay.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger.tunnel\linker.messenger.tunnel.csproj" />
|
||||
<ProjectReference Include="..\linker.messenger\linker.messenger.csproj" />
|
||||
<ProjectReference Include="..\linker.signin\linker.messenger.signin.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
@@ -71,6 +71,8 @@ namespace linker.messenger.relay.client
|
||||
IRelayClientTransport transport = Transports.FirstOrDefault(c => c.Type == relayClientStore.RelayType && relayClientStore.Disabled == false);
|
||||
if (transport == null)
|
||||
{
|
||||
if (LoggerHelper.Instance.LoggerLevel <= LoggerTypes.DEBUG)
|
||||
LoggerHelper.Instance.Error($"relay to {remoteMachineId} fail,transport not found {relayClientStore.RelayType},{relayClientStore.Disabled}");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@@ -13,7 +13,7 @@ using linker.messenger.relay.server;
|
||||
|
||||
namespace linker.messenger.relay.client.transport
|
||||
{
|
||||
public sealed class RelayClientTransportSelfHost : IRelayClientTransport
|
||||
public class RelayClientTransportSelfHost : IRelayClientTransport
|
||||
{
|
||||
public string Name => "Linker";
|
||||
public RelayClientType Type => RelayClientType.Linker;
|
||||
|
@@ -46,7 +46,7 @@ namespace linker.messenger.relay.messenger
|
||||
private readonly RelayServerValidatorTransfer relayValidatorTransfer;
|
||||
private readonly ISerializer serializer;
|
||||
|
||||
public RelayServerMessenger(IMessengerSender messengerSender, SignCaching signCaching, RelayServerMasterTransfer relayServerTransfer, RelayServerValidatorTransfer relayValidatorTransfer, ISerializer serializer)
|
||||
public RelayServerMessenger(IMessengerSender messengerSender, SignCaching signCaching, ISerializer serializer, RelayServerMasterTransfer relayServerTransfer, RelayServerValidatorTransfer relayValidatorTransfer)
|
||||
{
|
||||
this.messengerSender = messengerSender;
|
||||
this.signCaching = signCaching;
|
||||
|
@@ -1,6 +1,5 @@
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.messenger.relay.server.caching;
|
||||
using System.Buffers;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
@@ -19,13 +18,11 @@ namespace linker.messenger.relay.server
|
||||
RelaySpeedLimit limitTotal = new RelaySpeedLimit();
|
||||
|
||||
private readonly ISerializer serializer;
|
||||
private readonly IRelayServerCaching relayCaching;
|
||||
private readonly IRelayServerNodeStore relayServerNodeStore;
|
||||
private readonly IRelayServerMasterStore relayServerMasterStore;
|
||||
public RelayServerNodeTransfer(ISerializer serializer, IRelayServerCaching relayCaching, IRelayServerNodeStore relayServerNodeStore, IRelayServerMasterStore relayServerMasterStore)
|
||||
public RelayServerNodeTransfer(ISerializer serializer, IRelayServerNodeStore relayServerNodeStore, IRelayServerMasterStore relayServerMasterStore)
|
||||
{
|
||||
this.serializer = serializer;
|
||||
this.relayCaching = relayCaching;
|
||||
this.relayServerNodeStore = relayServerNodeStore;
|
||||
this.relayServerMasterStore = relayServerMasterStore;
|
||||
|
||||
|
@@ -97,7 +97,6 @@ namespace linker.plugins.tunnel
|
||||
transportUdpPortMap,
|
||||
new TransportUdp(),
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private NetworkInfo GetLocalConfig()
|
||||
|
@@ -12,6 +12,7 @@ namespace linker.messenger
|
||||
public interface IMessengerResolver
|
||||
{
|
||||
public void Initialize(string certificate, string password);
|
||||
public void Initialize(X509Certificate2 certificate);
|
||||
public Task<IConnection> BeginReceiveClient(Socket socket);
|
||||
public Task<IConnection> BeginReceiveClient(Socket socket, bool sendFlag, byte flag);
|
||||
public void LoadMessenger(List<IMessenger> list);
|
||||
@@ -31,7 +32,7 @@ namespace linker.messenger
|
||||
|
||||
private readonly IMessengerSender messengerSender;
|
||||
|
||||
private X509Certificate serverCertificate;
|
||||
private X509Certificate2 serverCertificate;
|
||||
public MessengerResolver(IMessengerSender messengerSender)
|
||||
{
|
||||
this.messengerSender = messengerSender;
|
||||
@@ -42,7 +43,7 @@ namespace linker.messenger
|
||||
string path = Path.GetFullPath(certificate);
|
||||
if (File.Exists(path))
|
||||
{
|
||||
serverCertificate = new X509Certificate(path, password);
|
||||
serverCertificate = new X509Certificate2(path, password, X509KeyStorageFlags.Exportable);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -50,6 +51,10 @@ namespace linker.messenger
|
||||
Environment.Exit(0);
|
||||
}
|
||||
}
|
||||
public void Initialize(X509Certificate2 certificate)
|
||||
{
|
||||
serverCertificate = certificate;
|
||||
}
|
||||
|
||||
public virtual void AddReceive(ushort id, ulong bytes) { }
|
||||
public virtual void AddSendt(ushort id, ulong bytes) { }
|
||||
|
@@ -1,6 +1,5 @@
|
||||
using linker.libs;
|
||||
using linker.libs.extends;
|
||||
using linker.messenger;
|
||||
|
||||
namespace linker.messenger.signin
|
||||
{
|
||||
@@ -10,7 +9,7 @@ namespace linker.messenger.signin
|
||||
private readonly IMessengerSender messengerSender;
|
||||
private readonly ISerializer serializer;
|
||||
|
||||
public SignInServerMessenger(SignCaching signCaching, IMessengerSender messengerSender, ISerializer serializer)
|
||||
public SignInServerMessenger(IMessengerSender messengerSender, SignCaching signCaching, ISerializer serializer)
|
||||
{
|
||||
this.signCaching = signCaching;
|
||||
this.messengerSender = messengerSender;
|
||||
|
16
linker.sln
16
linker.sln
@@ -19,7 +19,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.signin", "
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.tunnel", "linker.messenger.tunnel\linker.messenger.tunnel.csproj", "{92582A55-8BBF-4B82-892D-75CEC8969EAF}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.messenger.relay", "linker.messenger.relay\linker.messenger.relay.csproj", "{90E99334-FBF6-423F-A636-89B1E71D8FEE}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "linker.messenger.relay", "linker.messenger.relay\linker.messenger.relay.csproj", "{90E99334-FBF6-423F-A636-89B1E71D8FEE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "linker.messenger.example", "linker.messenger.example\linker.messenger.example.csproj", "{98970DF9-0996-4111-97BA-DD495A098498}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -139,6 +141,18 @@ Global
|
||||
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{90E99334-FBF6-423F-A636-89B1E71D8FEE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Release|x64.Build.0 = Release|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{98970DF9-0996-4111-97BA-DD495A098498}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
@@ -30,7 +30,7 @@ namespace linker.plugins.relay
|
||||
|
||||
public void AddClient(ServiceCollection serviceCollection, FileConfig config)
|
||||
{
|
||||
serviceCollection.AddSingleton<RelayClientTransportSelfHost>();
|
||||
serviceCollection.AddSingleton<PlusRelayClientTransportSelfHost>();
|
||||
serviceCollection.AddSingleton<RelayClientTransfer>();
|
||||
|
||||
|
||||
|
@@ -1,4 +1,5 @@
|
||||
using linker.messenger;
|
||||
using linker.libs;
|
||||
using linker.messenger;
|
||||
using linker.messenger.relay.client;
|
||||
using linker.messenger.relay.client.transport;
|
||||
using linker.plugins.client;
|
||||
@@ -7,7 +8,11 @@ using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace linker.plugins.relay.client
|
||||
{
|
||||
public class PlusRelayClientStore : IRelayClientStore
|
||||
public sealed class PlusRelayClientTransportSelfHost : RelayClientTransportSelfHost
|
||||
{
|
||||
public PlusRelayClientTransportSelfHost(IMessengerSender messengerSender,ISerializer serializer, IRelayClientStore relayClientStore) :base(messengerSender, serializer, relayClientStore) { }
|
||||
}
|
||||
public sealed class PlusRelayClientStore : IRelayClientStore
|
||||
{
|
||||
public byte Flag => (byte)(ResolverType.Relay);
|
||||
|
||||
|
@@ -1,6 +1,4 @@
|
||||
using linker.messenger.relay.server;
|
||||
using linker.plugins.resolver;
|
||||
using linker.plugins.server;
|
||||
|
||||
namespace linker.plugins.relay.server
|
||||
{
|
||||
|
@@ -1,32 +1,36 @@
|
||||
using linker.tunnel.transport;
|
||||
using linker.plugins.client;
|
||||
using linker.messenger;
|
||||
using linker.messenger.tunnel;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
|
||||
namespace linker.plugins.tunnel
|
||||
{
|
||||
public sealed class PlusTunnelMessengerAdapter
|
||||
{
|
||||
public PlusTunnelMessengerAdapter(ClientSignInState clientSignInState,TunnelConfigTransfer tunnelConfigTransfer, TunnelMessengerAdapter tunnelMessengerAdapter)
|
||||
{
|
||||
|
||||
clientSignInState.NetworkEnabledHandle += (times) => tunnelMessengerAdapter.RefreshPortMap(tunnelConfigTransfer.PortMapLan, tunnelConfigTransfer.PortMapWan);
|
||||
tunnelConfigTransfer.OnChanged += () => tunnelMessengerAdapter.RefreshPortMap(tunnelConfigTransfer.PortMapLan, tunnelConfigTransfer.PortMapWan);
|
||||
}
|
||||
}
|
||||
public sealed class PlusTunnelMessengerAdapterStore : ITunnelMessengerAdapterStore
|
||||
{
|
||||
public IConnection SignConnection => clientSignInState.Connection;
|
||||
|
||||
public NetworkInfo Network => GetLocalConfig();
|
||||
|
||||
public X509Certificate2 Certificate => tunnelConfigTransfer.Certificate;
|
||||
|
||||
public List<TunnelTransportItemInfo> TunnelTransports => tunnelConfigTransfer.Transports;
|
||||
|
||||
private readonly ClientSignInState clientSignInState;
|
||||
private readonly ClientConfigTransfer clientConfigTransfer;
|
||||
private readonly TunnelConfigTransfer tunnelConfigTransfer;
|
||||
public PlusTunnelMessengerAdapterStore(ClientSignInState clientSignInState, ClientConfigTransfer clientConfigTransfer, TunnelConfigTransfer tunnelConfigTransfer, TunnelMessengerAdapter tunnelMessengerAdapter)
|
||||
public PlusTunnelMessengerAdapterStore(ClientSignInState clientSignInState, ClientConfigTransfer clientConfigTransfer, TunnelConfigTransfer tunnelConfigTransfer)
|
||||
{
|
||||
this.clientSignInState = clientSignInState;
|
||||
this.clientConfigTransfer = clientConfigTransfer;
|
||||
this.tunnelConfigTransfer = tunnelConfigTransfer;
|
||||
|
||||
clientSignInState.NetworkEnabledHandle += (times) => tunnelMessengerAdapter.RefreshPortMap(tunnelConfigTransfer.PortMapLan, tunnelConfigTransfer.PortMapWan);
|
||||
tunnelConfigTransfer.OnChanged += () => tunnelMessengerAdapter.RefreshPortMap(tunnelConfigTransfer.PortMapLan, tunnelConfigTransfer.PortMapWan);
|
||||
|
||||
}
|
||||
|
||||
public bool SetTunnelTransports(List<TunnelTransportItemInfo> list)
|
||||
|
@@ -44,6 +44,8 @@ namespace linker.plugins.tunnel
|
||||
//命令接口
|
||||
serviceCollection.AddSingleton<PlusTunnelClientMessenger>();
|
||||
serviceCollection.AddSingleton<ITunnelMessengerAdapterStore, PlusTunnelMessengerAdapterStore>();
|
||||
serviceCollection.AddSingleton<TunnelMessengerAdapter>();
|
||||
serviceCollection.AddSingleton<PlusTunnelMessengerAdapter>();
|
||||
|
||||
|
||||
serviceCollection.AddSingleton<TunnelExcludeIPTypesLoader>();
|
||||
@@ -75,6 +77,7 @@ namespace linker.plugins.tunnel
|
||||
TunnelConfigTransfer tunnelConfigTransfer = serviceProvider.GetService<TunnelConfigTransfer>();
|
||||
|
||||
ITunnelMessengerAdapterStore tunnelAdapter = serviceProvider.GetService<ITunnelMessengerAdapterStore>();
|
||||
PlusTunnelMessengerAdapter plusTunnelMessengerAdapter = serviceProvider.GetService<PlusTunnelMessengerAdapter>();
|
||||
|
||||
LoggerHelper.Instance.Info($"tunnel route level getting.");
|
||||
tunnelConfigTransfer.RefreshRouteLevel();
|
||||
|
@@ -1,5 +1,5 @@
|
||||
v1.6.4
|
||||
2024-12-19 17:21:14
|
||||
2024-12-20 17:18:32
|
||||
1. 优化UI,显示网络计算IP数
|
||||
2. 修复内网穿透不停止直接删除导致的无法再次添加的问题
|
||||
3. 优化网卡的端口转发
|
||||
|
Reference in New Issue
Block a user