mirror of
https://github.com/snltty/linker.git
synced 2025-10-06 01:26:54 +08:00
185
This commit is contained in:
@@ -22,7 +22,7 @@ namespace linker.libs.extends
|
|||||||
ReadCommentHandling = JsonCommentHandling.Skip,
|
ReadCommentHandling = JsonCommentHandling.Skip,
|
||||||
PropertyNameCaseInsensitive = true,
|
PropertyNameCaseInsensitive = true,
|
||||||
WriteIndented = 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)
|
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)
|
while (websocket.State == WebSocketState.Open)
|
||||||
{
|
{
|
||||||
result = await websocket.ReceiveAsync(buffer, CancellationToken.None);
|
try
|
||||||
switch (result.MessageType)
|
|
||||||
{
|
{
|
||||||
case WebSocketMessageType.Text:
|
result = await websocket.ReceiveAsync(buffer, CancellationToken.None);
|
||||||
{
|
switch (result.MessageType)
|
||||||
req = Encoding.UTF8.GetString(buffer.AsMemory(0, result.Count).Span).DeJson<ApiControllerRequestInfo>();
|
{
|
||||||
req.Connection = websocket;
|
case WebSocketMessageType.Text:
|
||||||
ApiControllerResponseInfo resp = await OnMessage(req);
|
{
|
||||||
await websocket.SendAsync(resp.ToJson().ToBytes(), WebSocketMessageType.Text, true, CancellationToken.None);
|
req = Encoding.UTF8.GetString(buffer.AsMemory(0, result.Count).Span).DeJson<ApiControllerRequestInfo>();
|
||||||
}
|
req.Connection = websocket;
|
||||||
break;
|
ApiControllerResponseInfo resp = await OnMessage(req);
|
||||||
case WebSocketMessageType.Binary:
|
await websocket.SendAsync(resp.ToJson().ToBytes(), WebSocketMessageType.Text, true, CancellationToken.None);
|
||||||
break;
|
}
|
||||||
case WebSocketMessageType.Close:
|
break;
|
||||||
await websocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closed by client", CancellationToken.None);
|
case WebSocketMessageType.Binary:
|
||||||
break;
|
break;
|
||||||
default:
|
case WebSocketMessageType.Close:
|
||||||
break;
|
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;
|
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)
|
public async Task SyncDefault(ApiControllerParamsInfo param)
|
||||||
{
|
{
|
||||||
SyncInfo info = param.Content.DeJson<SyncInfo>();
|
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(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.SetDefaultNodeId(info.Data.Key);
|
||||||
relayClientStore.SetDefaultProtocol(info.Data.Value);
|
relayClientStore.SetDefaultProtocol(info.Data.Value);
|
||||||
@@ -126,9 +126,14 @@ namespace linker.messenger.relay
|
|||||||
public sealed class SyncInfo
|
public sealed class SyncInfo
|
||||||
{
|
{
|
||||||
public string[] Ids { get; set; } = [];
|
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
|
public sealed class RelayConnectInfo
|
||||||
{
|
{
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
v1.8.5
|
v1.8.5
|
||||||
2025-06-23 10:05:27
|
2025-06-23 11:57:38
|
||||||
1. 一些累计更新
|
1. 一些累计更新
|
||||||
2. 备用信标服务器
|
2. 备用信标服务器
|
||||||
3. 设置默认中继节点
|
3. 设置默认中继节点
|
||||||
|
Reference in New Issue
Block a user