This commit is contained in:
snltty
2025-06-23 11:57:38 +08:00
parent 7281b63e77
commit 7aeb70a444
5 changed files with 66 additions and 23 deletions

View File

@@ -22,7 +22,7 @@ namespace linker.libs.extends
ReadCommentHandling = JsonCommentHandling.Skip,
PropertyNameCaseInsensitive = true,
WriteIndented = true,
Converters = { new IPAddressJsonConverter(), new IPEndpointJsonConverter(), new DateTimeJsonConverter(), new BitArrayJsonConverter() },
Converters = { new IPAddressJsonConverter(), new IPEndpointJsonConverter(), new DateTimeJsonConverter(), new BitArrayJsonConverter()},
};
public static void AddAOT(JsonSerializerContext[] contexts)
{

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using System.Text.Json;
namespace linker.libs.json
{
public class KeyValuePairJsonConverter<TKey, TValue> : JsonConverter<KeyValuePair<TKey, TValue>>
{
public override KeyValuePair<TKey, TValue> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using (JsonDocument doc = JsonDocument.ParseValue(ref reader))
{
var root = doc.RootElement;
TKey key = JsonSerializer.Deserialize<TKey>(root.GetProperty("Key").GetRawText());
TValue value = JsonSerializer.Deserialize<TValue>(root.GetProperty("Value").GetRawText());
return new KeyValuePair<TKey, TValue>(key, value);
}
}
public override void Write(Utf8JsonWriter writer, KeyValuePair<TKey, TValue> value, JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WritePropertyName("Key");
JsonSerializer.Serialize(writer, value.Key, options);
writer.WritePropertyName("Value");
JsonSerializer.Serialize(writer, value.Value, options);
writer.WriteEndObject();
}
}
}

View File

@@ -179,24 +179,31 @@ namespace linker.libs.web
while (websocket.State == WebSocketState.Open)
{
result = await websocket.ReceiveAsync(buffer, CancellationToken.None);
switch (result.MessageType)
try
{
case WebSocketMessageType.Text:
{
req = Encoding.UTF8.GetString(buffer.AsMemory(0, result.Count).Span).DeJson<ApiControllerRequestInfo>();
req.Connection = websocket;
ApiControllerResponseInfo resp = await OnMessage(req);
await websocket.SendAsync(resp.ToJson().ToBytes(), WebSocketMessageType.Text, true, CancellationToken.None);
}
break;
case WebSocketMessageType.Binary:
break;
case WebSocketMessageType.Close:
await websocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closed by client", CancellationToken.None);
break;
default:
break;
result = await websocket.ReceiveAsync(buffer, CancellationToken.None);
switch (result.MessageType)
{
case WebSocketMessageType.Text:
{
req = Encoding.UTF8.GetString(buffer.AsMemory(0, result.Count).Span).DeJson<ApiControllerRequestInfo>();
req.Connection = websocket;
ApiControllerResponseInfo resp = await OnMessage(req);
await websocket.SendAsync(resp.ToJson().ToBytes(), WebSocketMessageType.Text, true, CancellationToken.None);
}
break;
case WebSocketMessageType.Binary:
break;
case WebSocketMessageType.Close:
await websocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closed by client", CancellationToken.None);
break;
default:
break;
}
}
catch (Exception ex)
{
LoggerHelper.Instance.Error($"{req.Path}->{ex}");
}
}
}

View File

@@ -53,15 +53,15 @@ namespace linker.messenger.relay
return relayTestTransfer.Nodes;
}
public KeyValuePair<string, TunnelProtocolType> GetDefault(ApiControllerParamsInfo param)
public KeyValuePairInfo GetDefault(ApiControllerParamsInfo param)
{
return new KeyValuePair<string, TunnelProtocolType>(relayClientStore.DefaultNodeId, relayClientStore.DefaultProtocol);
return new KeyValuePairInfo { Key = relayClientStore.DefaultNodeId, Value = relayClientStore.DefaultProtocol };
}
public async Task SyncDefault(ApiControllerParamsInfo param)
{
SyncInfo info = param.Content.DeJson<SyncInfo>();
await syncTreansfer.Sync("RelayDefault", info.Ids, serializer.Serialize(info.Data)).ConfigureAwait(false);
if(info.Ids.Length == 0 || info.Ids.Contains(signInClientStore.Id))
if (info.Ids.Length == 0 || info.Ids.Contains(signInClientStore.Id))
{
relayClientStore.SetDefaultNodeId(info.Data.Key);
relayClientStore.SetDefaultProtocol(info.Data.Value);
@@ -126,9 +126,14 @@ namespace linker.messenger.relay
public sealed class SyncInfo
{
public string[] Ids { get; set; } = [];
public KeyValuePair<string, TunnelProtocolType> Data { get; set; } = new KeyValuePair<string, TunnelProtocolType>();
public KeyValuePairInfo Data { get; set; } = new KeyValuePairInfo();
}
public sealed class KeyValuePairInfo
{
public string Key { get; set; } = string.Empty;
public TunnelProtocolType Value { get; set; } = TunnelProtocolType.Tcp;
}
public sealed class RelayConnectInfo
{

View File

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