mirror of
https://github.com/snltty/linker.git
synced 2025-09-26 21:15:57 +08:00
185
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
31
src/linker.libs/json/KeyValuePairJsonConverter.cs
Normal file
31
src/linker.libs/json/KeyValuePairJsonConverter.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
@@ -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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
{
|
||||
|
@@ -1,5 +1,5 @@
|
||||
v1.8.5
|
||||
2025-06-23 10:05:27
|
||||
2025-06-23 11:57:38
|
||||
1. 一些累计更新
|
||||
2. 备用信标服务器
|
||||
3. 设置默认中继节点
|
||||
|
Reference in New Issue
Block a user