This commit is contained in:
snltty
2025-06-23 15:14:21 +08:00
parent d25f54d0e4
commit 2c2f225067
7 changed files with 47 additions and 75 deletions

View File

@@ -60,9 +60,11 @@ namespace linker.messenger.channel
connections.AddOrUpdate(connection.RemoteMachineId, connection, (a, b) => connection);
}
Version.Increment();
Connected(connection);
pcpTransfer.AddConnection(connection);
pcpTransfer.AddConnection(connection);
}

View File

@@ -1,69 +0,0 @@
using linker.libs;
using linker.messenger.decenter;
using linker.messenger.signin;
using System.Collections.Concurrent;
namespace linker.messenger.pcp
{
public sealed class PcpDecenter : IDecenter
{
public string Name => "pcp";
public VersionManager PushVersion { get; } = new VersionManager();
public VersionManager DataVersion { get; } = new VersionManager();
private ConcurrentDictionary<string, List<string>> history = new ConcurrentDictionary<string, List<string>>();
private readonly SignInClientState signInClientState;
private readonly ISignInClientStore signInClientStore;
private readonly IPcpStore pcpStore;
private readonly ISerializer serializer;
public PcpDecenter( SignInClientState signInClientState, ISignInClientStore signInClientStore, IPcpStore pcpStore, ISerializer serializer)
{
this.signInClientState = signInClientState;
this.signInClientStore = signInClientStore;
this.pcpStore = pcpStore;
this.serializer = serializer;
signInClientState.OnSignInSuccess += (times) => PushVersion.Increment();
}
public List<string> GetNodes(string fromMachineId, string toMachineId)
{
if (history.TryGetValue(fromMachineId, out List<string> from) && history.TryGetValue(toMachineId, out List<string> to))
{
}
return new List<string>();
}
public Memory<byte> GetData()
{
return serializer.Serialize(new HistoryDecenterInfo { MachineId = signInClientStore.Id, List = pcpStore.PcpHistory.History });
}
public void AddData(Memory<byte> data)
{
HistoryDecenterInfo historyDecenterInfo = serializer.Deserialize<HistoryDecenterInfo>(data.Span);
history.AddOrUpdate(historyDecenterInfo.MachineId, historyDecenterInfo.List, (a, b) => historyDecenterInfo.List);
}
public void AddData(List<ReadOnlyMemory<byte>> data)
{
List<HistoryDecenterInfo> list = data.Select(c => serializer.Deserialize<HistoryDecenterInfo>(c.Span)).ToList();
foreach (var historyDecenterInfo in list)
{
history.AddOrUpdate(historyDecenterInfo.MachineId, historyDecenterInfo.List, (a, b) => historyDecenterInfo.List);
}
}
public void ClearData()
{
history.Clear();
}
public void ProcData()
{
}
}
public sealed partial class HistoryDecenterInfo
{
public string MachineId { get; set; }
public List<string> List { get; set; }
}
}

View File

@@ -9,11 +9,15 @@ namespace linker.messenger.pcp
{
private readonly TunnelTransfer tunnel;
private readonly IMessengerSender messengerSender;
private readonly ISerializer serializer;
private readonly IPcpStore pcpStore;
public PcpClientMessenger(TunnelTransfer tunnel, IMessengerSender messengerSender)
public PcpClientMessenger(TunnelTransfer tunnel, IMessengerSender messengerSender, ISerializer serializer, IPcpStore pcpStore)
{
this.tunnel = tunnel;
this.messengerSender = messengerSender;
this.serializer = serializer;
this.pcpStore = pcpStore;
}
[MessengerId((ushort)PcpMessengerIds.Begin)]
@@ -22,8 +26,6 @@ namespace linker.messenger.pcp
connection.Write(Helper.TrueArray);
}
[MessengerId((ushort)PcpMessengerIds.Fail)]
public void Fail(IConnection connection)
{
@@ -33,6 +35,12 @@ namespace linker.messenger.pcp
public void Success(IConnection connection)
{
}
[MessengerId((ushort)PcpMessengerIds.Nodes)]
public void Nodes(IConnection connection)
{
connection.Write(serializer.Serialize(pcpStore.PcpHistory.History));
}
}
public sealed class PcpServerMessenger : IMessenger
@@ -102,6 +110,33 @@ namespace linker.messenger.pcp
}).ConfigureAwait(false);
}
}
[MessengerId((ushort)PcpMessengerIds.NodesForward)]
public void NodesForward(IConnection connection)
{
string machineid = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, machineid, out SignCacheInfo from, out SignCacheInfo to))
{
uint requestid = connection.ReceiveRequestWrap.RequestId;
_ = messengerSender.SendReply(new MessageRequestWrap
{
Connection = to.Connection,
MessengerId = (ushort)PcpMessengerIds.Nodes,
}).ContinueWith(async (result) =>
{
if (result.Result.Code == MessageResponeCodes.OK && result.Result.Data.Length > 0)
{
await messengerSender.ReplyOnly(new MessageResponseWrap
{
Connection = connection,
Payload = result.Result.Data,
RequestId = requestid,
}, (ushort)PcpMessengerIds.NodesForward).ConfigureAwait(false);
}
});
}
}
}
}

View File

@@ -13,6 +13,9 @@
Success = 3105,
SuccessForward = 3106,
Nodes = 3107,
NodesForward = 3108,
None = 3199
}
}

View File

@@ -100,6 +100,7 @@ namespace linker.messenger.pcp
public void AddConnection(ITunnelConnection connection)
{
if (connection.Type != TunnelType.P2P) return;
pcpStore.AddHistory(connection);
}

View File

@@ -60,7 +60,7 @@ namespace linker.messenger.relay
public async Task SyncDefault(ApiControllerParamsInfo param)
{
SyncInfo info = param.Content.DeJson<SyncInfo>();
await syncTreansfer.Sync("RelayDefault", info.Ids, serializer.Serialize(info.Data)).ConfigureAwait(false);
await syncTreansfer.Sync("RelayDefault", info.Ids, serializer.Serialize(new KeyValuePair<string, TunnelProtocolType>(info.Data.Key, info.Data.Value))).ConfigureAwait(false);
if (info.Ids.Length == 0 || info.Ids.Contains(signInClientStore.Id))
{
relayClientStore.SetDefaultNodeId(info.Data.Key);

View File

@@ -1,5 +1,5 @@
v1.8.5
2025-06-23 14:37:11
2025-06-23 15:14:21
1. 一些累计更新
2. 备用信标服务器
3. 设置默认中继节点