重构中继

This commit is contained in:
snltty
2025-12-01 17:42:29 +08:00
parent 8fc3ac328b
commit 3598795812
13 changed files with 222 additions and 85 deletions

View File

@@ -1,5 +1,5 @@
v1.9.6
2025-11-30 17:05:07
2025-12-01 17:42:29
1. 一些累计更新一些BUG修复
2. 优化客户端数据同步,减少服务器流量
3. 去除cdkey改为发电解锁中继速度

View File

@@ -9,8 +9,8 @@ slug: /p2p/relay
:::tip[说明]
1. 如果你自建信标服务器,填写你服务器的管理密钥和管理密码则可以管理服务器的中继cdkey发布cdkey给别人使用
2. 如果你使用别人的服务器,你没有密钥可以不填写则需要使用别人服务器的公开中继节点或使用他提供的cdkey
1. 如果你自建信标服务器,填写你服务器的管理密钥和管理密码
2. 如果你使用别人的服务器,你没有密钥可以不填写
3. `按喜好调整好即可,往后的所有通信都是自动的,无需其它操作`
:::
@@ -19,56 +19,39 @@ slug: /p2p/relay
:::tip[说明]
1. 如果你有多个服务器,希望将这些服务器作为一个中继节点
2. 在主服务器外的其它服务器部署一个服务端
3. 然后 `configs/server.json` 中(`Relay->Distributed`)下修改配置
2. 在主服务器外的其它服务器部署一个服务端,然后
- 可以打开`configs/server.json`,将`Relay->ShareKey`中的内容复制到主服务中节点列表处导入
- 也可以留意程序运行时类似`build relay share key : xxx`的输出,复制内容主服务中节点列表处导入
3. 默认配置就是可用的,但是也可以对中继配置进行一些修改,在`configs/server.json->Relay` 下修改配置
```json
//中继
"Relay": {
//多节点
"Distributed": {
//作为节点时
"Node": {
//节点Id
"Id": "279DBACF-6F0B-46D4-9BA9-902EB6824849",
//节点名称
"Name": "default",
//节点地址 域名/IP:端口 或 域名/IP当只填写域名/IP时默认使用 ServicePort
"Host": "0.0.0.0:1802",
//节点最大连接数
"MaxConnection": 0,
//节点连接最大带宽
"MaxBandwidth": 0,
//节点最大总带宽
"MaxBandwidthTotal": 0,
//节点最大流量
"MaxGbTotal": 0,
//节点剩余流量
"MaxGbTotalLastBytes": 0,
//当前月份,月份变化时重置剩余流量
"MaxGbTotalMonth": 0,
//节点是否公开
"Public": false,
//主机地址
"MasterHost": "127.0.0.1:1802",
//主机密钥
"MasterSecretKey": "snltty",
//随便url管理页面展示时点击跳转
"Url": "https://linker-doc.snltty.com",
//支持TCP
"AllowTcp": true,
//支持UDP
"AllowUdp": false,
//与主机同步版本
"Sync2Server": false,
//主机备用地址,默认不填即可
"MasterHosts": []
},
//作为主机时
"Master": {
"SecretKey": "snltty"
}
}
//分享key自动生成【无需修改】
"ShareKey": "",
//管理密钥,自动生成,第一个导入此中继的信标服务可以修改本中继节点配置,【无需修改】
"MasterKey": "d763f00a21cd1e0a71e7d833ed2a4e51",
//如果你修改了DataEachMonth的值则修改为0等待程序启动后计算剩余流量
"DataMonth": 0,
//域名,可以不填
"Domain": "",
//节点id自动生成【无需修改】
"NodeId": "111FF038-C0D6-422C-9076-B8A47A81F1C0",
//节点名称
"Name": "default",
//节点协议1为TCP2为UDP3为TCP+UDP
"Protocol": 1,
//最大连接数0为不限制
"Connections": 0,
//带宽限制0为不限制
"Bandwidth": 0,
//月流量0为不限制
"DataEachMonth": 0,
//剩余流量,自动生成,【无需修改】
"DataRemain": 0,
//跳转地址,可以填写你喜欢的地址,在节点列表中点击节点名称跳转到此地址
"Url": "https://linker.snltty.com",
//节点图标,可以填写你喜欢的图标,在节点列表中展示
"Logo": "https://linker.snltty.com/img/logo.png"
}
```
:::

View File

@@ -1,6 +1,7 @@
using linker.libs;
using linker.libs.extends;
using linker.libs.web;
using linker.messenger.relay.messenger;
using linker.messenger.relay.server;
using linker.messenger.signin;
using linker.messenger.sync;
@@ -14,20 +15,25 @@ namespace linker.messenger.relay.client
{
private readonly RelayClientTestTransfer relayTestTransfer;
private readonly IRelayClientStore relayClientStore;
private readonly IMessengerSender messengerSender;
private readonly ISerializer serializer;
private readonly ISignInClientStore signInClientStore;
private readonly SyncTreansfer syncTreansfer;
private readonly TunnelTransfer tunnelTransfer;
private readonly SignInClientState signInClientState;
public RelayApiController(RelayClientTestTransfer relayTestTransfer, IRelayClientStore relayClientStore, IMessengerSender messengerSender, ISerializer serializer,
ISignInClientStore signInClientStore, SyncTreansfer syncTreansfer, TunnelTransfer tunnelTransfer)
ISignInClientStore signInClientStore, SyncTreansfer syncTreansfer, TunnelTransfer tunnelTransfer, SignInClientState signInClientState)
{
this.relayTestTransfer = relayTestTransfer;
this.relayClientStore = relayClientStore;
this.messengerSender = messengerSender;
this.serializer = serializer;
this.signInClientStore = signInClientStore;
this.syncTreansfer = syncTreansfer;
this.tunnelTransfer = tunnelTransfer;
this.signInClientState = signInClientState;
}
public List<RelayServerNodeStoreInfo> Subscribe(ApiControllerParamsInfo param)
@@ -35,6 +41,13 @@ namespace linker.messenger.relay.client
relayTestTransfer.Subscribe();
return relayTestTransfer.Nodes;
}
public bool Connect(ApiControllerParamsInfo param)
{
RelayConnectInfo relayConnectInfo = param.Content.DeJson<RelayConnectInfo>();
_ = tunnelTransfer.ConnectAsync(relayConnectInfo.ToMachineId, relayConnectInfo.TransactionId, TunnelProtocolType.Udp,
new RelayInfo { NodeId = relayConnectInfo.NodeId }.ToJson(), transportNames: ["TcpRelay"]);
return true;
}
public KeyValueInfo<string, TunnelProtocolType> GetDefault(ApiControllerParamsInfo param)
{
@@ -51,14 +64,36 @@ namespace linker.messenger.relay.client
}
}
public bool Connect(ApiControllerParamsInfo param)
{
RelayConnectInfo relayConnectInfo = param.Content.DeJson<RelayConnectInfo>();
_ = tunnelTransfer.ConnectAsync(relayConnectInfo.ToMachineId, relayConnectInfo.TransactionId, TunnelProtocolType.Udp,
new RelayInfo { NodeId = relayConnectInfo.NodeId }.ToJson(), transportNames: ["TcpRelay"]);
return true;
}
public async Task<string> Share(ApiControllerParamsInfo param)
{
var resp = await messengerSender.SendReply(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)RelayMessengerIds.Share,
});
return resp.Code == MessageResponeCodes.OK ? serializer.Deserialize<string>(resp.Data.Span) : $"network error:{resp.Code}";
}
public async Task<string> Import(ApiControllerParamsInfo param)
{
var resp = await messengerSender.SendReply(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)RelayMessengerIds.Import,
Payload = serializer.Serialize(param.Content)
});
return resp.Code == MessageResponeCodes.OK ? serializer.Deserialize<string>(resp.Data.Span) : $"network error:{resp.Code}";
}
public async Task<string> Remove(ApiControllerParamsInfo param)
{
var resp = await messengerSender.SendReply(new MessageRequestWrap
{
Connection = signInClientState.Connection,
MessengerId = (ushort)RelayMessengerIds.Remove,
Payload = serializer.Serialize(int.Parse(param.Content))
});
return resp.Code == MessageResponeCodes.OK ? serializer.Deserialize<string>(resp.Data.Span) : $"network error:{resp.Code}";
}
}

View File

@@ -31,7 +31,8 @@ namespace linker.messenger.relay.messenger
private readonly RelayServerNodeReportTransfer relayServerNodeReportTransfer;
public RelayServerMessenger(SignInServerCaching signCaching, ISerializer serializer, RelayServerValidatorTransfer relayValidatorTransfer,
RelayServerReportResolver relayServerReportResolver, RelayServerMasterTransfer relayServerMasterTransfer, RelayServerNodeReportTransfer relayServerNodeReportTransfer)
RelayServerReportResolver relayServerReportResolver, RelayServerMasterTransfer relayServerMasterTransfer,
RelayServerNodeReportTransfer relayServerNodeReportTransfer)
{
this.signCaching = signCaching;
this.relayValidatorTransfer = relayValidatorTransfer;
@@ -122,6 +123,46 @@ namespace linker.messenger.relay.messenger
}
[MessengerId((ushort)RelayMessengerIds.Share)]
public async Task Share(IConnection connection)
{
if (signCaching.TryGet(connection.Id, out SignCacheInfo from) == false || from.Super == false)
{
connection.Write(serializer.Serialize("need super key"));
return;
}
connection.Write(serializer.Serialize(relayServerNodeReportTransfer.Config.ShareKey));
}
[MessengerId((ushort)RelayMessengerIds.Import)]
public async Task Import(IConnection connection)
{
string sharekey = serializer.Deserialize<string>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, out SignCacheInfo from) == false || from.Super == false)
{
connection.Write(serializer.Serialize("need super key"));
return;
}
string result = await relayServerNodeReportTransfer.Import(sharekey).ConfigureAwait(false);
connection.Write(serializer.Serialize(result));
}
[MessengerId((ushort)RelayMessengerIds.Remove)]
public async Task Remove(IConnection connection)
{
int id = serializer.Deserialize<int>(connection.ReceiveRequestWrap.Payload.Span);
if (signCaching.TryGet(connection.Id, out SignCacheInfo from) == false || from.Super == false)
{
connection.Write(serializer.Serialize("need super key"));
return;
}
bool result = await relayServerNodeReportTransfer.Remove(id).ConfigureAwait(false);
connection.Write(serializer.Serialize(result ? string.Empty : "remove fail"));
}
[MessengerId((ushort)RelayMessengerIds.NodeReport)]
public async Task NodeReport(IConnection connection)
{

View File

@@ -14,6 +14,11 @@
SignIn = 2134,
Report = 2135,
Share = 2136,
Import = 2137,
Remove = 2138,
Max = 2199
}
}

View File

@@ -32,6 +32,7 @@ namespace linker.messenger.relay.server
public void SetDataRemain(long value);
public void SetShareKey(string shareKey);
public void SetMasterKey(string masterKey);
/// <summary>
/// 提交保存
@@ -44,11 +45,11 @@ namespace linker.messenger.relay.server
private string nodeId = Guid.NewGuid().ToString().ToUpper();
public string NodeId { get => nodeId; set { nodeId = value.SubStr(0, 36); } }
private string name = Dns.GetHostName().SubStr(0, 32);
private string name = "default";
public string Name { get => name; set { name = value.SubStr(0, 32); } }
public TunnelProtocolType Protocol { get; set; } = TunnelProtocolType.Tcp;
public int Connections { get; set; } = 1000;
public int Connections { get; set; }
public int Bandwidth { get; set; }
public int DataEachMonth { get; set; }
public long DataRemain { get; set; }
@@ -60,12 +61,14 @@ namespace linker.messenger.relay.server
public sealed class RelayServerConfigInfo : RelayServerNodeInfo
{
public string ShareKey { get; set; } = string.Empty;
public string MasterKey { get; set; } = string.Empty;
public int DataMonth { get; set; }
public string Domain { get; set; } = string.Empty;
}
public class RelayServerNodeReportInfo : RelayServerNodeInfo
{
public string MasterKey { get; set; } = string.Empty;
public string Version { get; set; } = string.Empty;
public int ConnectionsRatio { get; set; }
public double BandwidthRatio { get; set; }
@@ -79,12 +82,14 @@ namespace linker.messenger.relay.server
public string Host { get; set; } = string.Empty;
public int BandwidthEachConnection { get; set; } = 50;
public int BandwidthEach { get; set; } = 50;
public bool Public { get; set; }
public long LastTicks { get; set; }
public int Delay { get; set; }
public bool Manageable { get; set; }
}

View File

@@ -6,6 +6,7 @@
public Task<RelayServerNodeStoreInfo> GetByNodeId(string nodeId);
public Task<bool> Add(RelayServerNodeStoreInfo info);
public Task<bool> Report(RelayServerNodeReportInfo info);
public Task<bool> Delete(int id);
}

View File

@@ -11,7 +11,8 @@ namespace linker.messenger.relay.server
private readonly IRelayServerCaching relayCaching;
private readonly IRelayServerWhiteListStore relayServerWhiteListStore;
private readonly RelayServerConnectionTransfer relayServerConnectionTransfer;
public RelayServerMasterTransfer(IRelayServerCaching relayCaching, IRelayServerWhiteListStore relayServerWhiteListStore, RelayServerConnectionTransfer relayServerConnectionTransfer)
public RelayServerMasterTransfer(IRelayServerCaching relayCaching, IRelayServerWhiteListStore relayServerWhiteListStore,
RelayServerConnectionTransfer relayServerConnectionTransfer)
{
this.relayCaching = relayCaching;
this.relayServerWhiteListStore = relayServerWhiteListStore;

View File

@@ -14,6 +14,7 @@ namespace linker.messenger.relay.server
private int connectionNum = 0;
private ulong bytes = 0;
private ulong lastBytes = 0;
private string md5 = string.Empty;
private readonly ICrypto crypto = CryptoFactory.CreateSymmetric(Helper.GlobalString);
@@ -38,6 +39,8 @@ namespace linker.messenger.relay.server
this.relayServerWhiteListStore = relayServerWhiteListStore;
this.messengerResolver = messengerResolver;
md5 = Config.NodeId.Md5();
_ = ReportTask();
SignInTask();
@@ -67,7 +70,7 @@ namespace linker.messenger.relay.server
}
public async Task<bool> Report(RelayServerNodeReportInfo info)
{
if (relayServerConnectionTransfer.TryGet(ConnectionSideType.Node, info.NodeId, out IConnection connection) == false) return false;
if (relayServerConnectionTransfer.TryGet(ConnectionSideType.Node, info.NodeId, out _) == false) return false;
return await relayServerNodeStore.Report(info).ConfigureAwait(false);
}
@@ -80,16 +83,51 @@ namespace linker.messenger.relay.server
connection.Id = serverId;
relayServerConnectionTransfer.TryAdd(ConnectionSideType.Master, connection.Id, connection);
//未被配置,或默认配置的,设它为管理端
if (string.IsNullOrWhiteSpace(Config.MasterKey) || md5 == Config.MasterKey)
{
relayServerConfigStore.SetMasterKey(serverId.Md5());
relayServerConfigStore.Confirm();
}
return true;
}
public async Task<string> Import(string shareKey)
{
try
{
RelayServerNodeShareInfo info = serializer.Deserialize<RelayServerNodeShareInfo>(crypto.Decode(Convert.FromBase64String(shareKey)).Span);
bool result = await relayServerNodeStore.Add(new RelayServerNodeStoreInfo
{
NodeId = info.NodeId,
Host = info.Host,
Name = info.Name,
LastTicks = Environment.TickCount64
}).ConfigureAwait(false);
if (result == false)
{
return "node already exists";
}
}
catch (Exception ex)
{
return ex.Message;
}
return string.Empty;
}
public async Task<bool> Remove(int id)
{
return await relayServerNodeStore.Delete(id).ConfigureAwait(false);
}
public async Task<List<RelayServerNodeStoreInfo>> GetNodes(bool validated, string userid, string machineId)
{
var nodes = (await relayServerWhiteListStore.GetNodes(userid, machineId)).Where(c => c.Bandwidth >= 0).SelectMany(c => c.Nodes);
var result = (await relayServerNodeStore.GetAll())
.Where(c => Environment.TickCount64 - c.LastTicks < 15000)
.Where(c => validated || Environment.TickCount64 - c.LastTicks < 15000)
.Where(c =>
{
return validated || nodes.Contains(c.NodeId) || nodes.Contains("*")
@@ -100,7 +138,7 @@ namespace linker.messenger.relay.server
return result.OrderByDescending(x => x.Connections == 0 ? int.MaxValue : x.Connections)
.ThenBy(x => x.ConnectionsRatio)
.ThenBy(x => x.BandwidthRatio)
.ThenByDescending(x => x.BandwidthEachConnection == 0 ? int.MaxValue : x.BandwidthEachConnection)
.ThenByDescending(x => x.BandwidthEach == 0 ? int.MaxValue : x.BandwidthEach)
.ThenByDescending(x => x.Bandwidth == 0 ? int.MaxValue : x.Bandwidth)
.ThenByDescending(x => x.DataEachMonth == 0 ? int.MaxValue : x.DataEachMonth)
.ThenByDescending(x => x.DataRemain == 0 ? long.MaxValue : x.DataRemain)
@@ -116,7 +154,7 @@ namespace linker.messenger.relay.server
return result.OrderByDescending(x => x.Connections == 0 ? int.MaxValue : x.Connections)
.ThenBy(x => x.ConnectionsRatio)
.ThenBy(x => x.BandwidthRatio)
.ThenByDescending(x => x.BandwidthEachConnection == 0 ? int.MaxValue : x.BandwidthEachConnection)
.ThenByDescending(x => x.BandwidthEach == 0 ? int.MaxValue : x.BandwidthEach)
.ThenByDescending(x => x.Bandwidth == 0 ? int.MaxValue : x.Bandwidth)
.ThenByDescending(x => x.DataEachMonth == 0 ? int.MaxValue : x.DataEachMonth)
.ThenByDescending(x => x.DataRemain == 0 ? long.MaxValue : x.DataRemain)
@@ -130,8 +168,8 @@ namespace linker.messenger.relay.server
{
await relayServerNodeStore.Add(new RelayServerNodeStoreInfo
{
NodeId = Config.NodeId,
Name = Config.Name,
NodeId = relayServerConfigStore.Config.NodeId,
Name = "default",
Host = $"{IPAddress.Loopback}:{relayServerConfigStore.ServicePort}"
}).ConfigureAwait(false);
@@ -240,7 +278,7 @@ namespace linker.messenger.relay.server
}).ConfigureAwait(false);
if (resp.Code == MessageResponeCodes.OK && resp.Data.Span.SequenceEqual(Helper.TrueArray))
{
Console.WriteLine($"relay sign in to node {c.NodeId} success");
LoggerHelper.Instance.Debug($"relay sign in to node {c.NodeId} success");
relayServerConnectionTransfer.TryAdd(ConnectionSideType.Node, c.NodeId, connection);
}
else

View File

@@ -24,7 +24,7 @@ namespace linker.messenger.relay.webapi
Version = c.Version,
BandwidthMaxMbps = c.Bandwidth,
BandwidthConnMbps = c.BandwidthEachConnection,
BandwidthConnMbps = c.BandwidthEach,
BandwidthCurrentMbps = c.BandwidthRatio,
BandwidthGbMonth = c.DataEachMonth,

View File

@@ -242,6 +242,8 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude]
string Logo => info.Logo;
[MemoryPackInclude]
string MasterKey => info.MasterKey;
[MemoryPackInclude]
string Version => info.Version;
[MemoryPackInclude]
int ConnectionsRatio => info.ConnectionsRatio;
@@ -252,7 +254,7 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackConstructor]
SerializableRelayServerNodeReportInfo(string nodeId, string name, TunnelProtocolType protocol, int connections, int bandwidth, int dataEachMonth,
long dataRemain, string url, string logo, string version, int connectionsRatio, double bandwidthRatio, IPEndPoint[] masters)
long dataRemain, string url, string logo, string masterKey, string version, int connectionsRatio, double bandwidthRatio, IPEndPoint[] masters)
{
var info = new RelayServerNodeReportInfo
{
@@ -265,6 +267,7 @@ namespace linker.messenger.serializer.memorypack
DataRemain = dataRemain,
Url = url,
Logo = logo,
MasterKey = masterKey,
Version = version,
ConnectionsRatio = connectionsRatio,
BandwidthRatio = bandwidthRatio,
@@ -311,6 +314,7 @@ namespace linker.messenger.serializer.memorypack
value.DataRemain = reader.ReadValue<long>();
value.Url = reader.ReadValue<string>();
value.Logo = reader.ReadValue<string>();
value.MasterKey = reader.ReadValue<string>();
value.Version = reader.ReadValue<string>();
value.ConnectionsRatio = reader.ReadValue<int>();
value.BandwidthRatio = reader.ReadValue<double>();
@@ -344,7 +348,10 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude]
string Logo => info.Logo;
[MemoryPackInclude]
string MasterKey => info.MasterKey;
[MemoryPackInclude]
string Version => info.Version;
[MemoryPackInclude]
int ConnectionsRatio => info.ConnectionsRatio;
[MemoryPackInclude]
@@ -358,17 +365,19 @@ namespace linker.messenger.serializer.memorypack
[MemoryPackInclude]
string Host => info.Host;
[MemoryPackInclude]
int BandwidthEachConnection => info.BandwidthEachConnection;
int BandwidthEachConnection => info.BandwidthEach;
[MemoryPackInclude]
bool Public => info.Public;
[MemoryPackInclude]
long LastTicks => info.LastTicks;
[MemoryPackInclude]
bool Manageable => info.Manageable;
[MemoryPackConstructor]
SerializableRelayServerNodeStoreInfo(string nodeId, string name, TunnelProtocolType protocol, int connections, int bandwidth, int dataEachMonth,
long dataRemain, string url, string logo, string version, int connectionsRatio, double bandwidthRatio, IPEndPoint[] servers,
int id, string host, int bandwidthEachConnection, bool Public, long lastTicks)
long dataRemain, string url, string logo, string masterKey, string version, int connectionsRatio, double bandwidthRatio, IPEndPoint[] servers,
int id, string host, int bandwidthEachConnection, bool Public, long lastTicks, bool manageable)
{
var info = new RelayServerNodeStoreInfo
{
@@ -381,15 +390,17 @@ namespace linker.messenger.serializer.memorypack
DataRemain = dataRemain,
Url = url,
Logo = logo,
MasterKey = masterKey,
Version = version,
ConnectionsRatio = connectionsRatio,
BandwidthRatio = bandwidthRatio,
Masters = servers,
Id = id,
Host = host,
BandwidthEachConnection = bandwidthEachConnection,
BandwidthEach = bandwidthEachConnection,
Public = Public,
LastTicks = lastTicks
LastTicks = lastTicks,
Manageable = manageable
};
this.info = info;
}
@@ -432,15 +443,17 @@ namespace linker.messenger.serializer.memorypack
value.DataRemain = reader.ReadValue<long>();
value.Url = reader.ReadValue<string>();
value.Logo = reader.ReadValue<string>();
value.MasterKey = reader.ReadValue<string>();
value.Version = reader.ReadValue<string>();
value.ConnectionsRatio = reader.ReadValue<int>();
value.BandwidthRatio = reader.ReadValue<double>();
value.Masters = reader.ReadValue<IPEndPoint[]>();
value.Id = reader.ReadValue<int>();
value.Host = reader.ReadValue<string>();
value.BandwidthEachConnection = reader.ReadValue<int>();
value.BandwidthEach = reader.ReadValue<int>();
value.Public = reader.ReadValue<bool>();
value.LastTicks = reader.ReadValue<long>();
value.Manageable = reader.ReadValue<bool>();
}
}
@@ -463,9 +476,9 @@ namespace linker.messenger.serializer.memorypack
{
var info = new RelayServerNodeShareInfo
{
NodeId= nodeId,
Host= host,
Name= name
NodeId = nodeId,
Host = host,
Name = name
};
this.info = info;
}

View File

@@ -7,8 +7,6 @@ namespace linker.messenger.store.file.relay
public int ServicePort => config.Data.Server.ServicePort;
public RelayServerConfigInfo Config => config.Data.Server.Relay;
private readonly FileConfig config;
public RelayServerConfigStore(FileConfig config)
{
@@ -38,5 +36,10 @@ namespace linker.messenger.store.file.relay
{
config.Data.Server.Relay.ShareKey = shareKey;
}
public void SetMasterKey(string masterKey)
{
config.Data.Server.Relay.MasterKey = masterKey;
}
}
}

View File

@@ -1,4 +1,5 @@
using linker.messenger.relay.server;
using linker.libs.extends;
using linker.messenger.relay.server;
using LiteDB;
namespace linker.messenger.store.file.relay
@@ -7,9 +8,11 @@ namespace linker.messenger.store.file.relay
{
private readonly ILiteCollection<RelayServerNodeStoreInfo> liteCollection;
public RelayServerNodeStore(Storefactory storefactory)
private string md5 = string.Empty;
public RelayServerNodeStore(Storefactory storefactory, IRelayServerConfigStore relayServerConfigStore)
{
liteCollection = storefactory.GetCollection<RelayServerNodeStoreInfo>("relay_server_master");
md5 = relayServerConfigStore.Config.NodeId.Md5();
}
public async Task<bool> Add(RelayServerNodeStoreInfo info)
@@ -22,6 +25,11 @@ namespace linker.messenger.store.file.relay
return await Task.FromResult(true).ConfigureAwait(false);
}
public async Task<bool> Delete(int id)
{
return await Task.FromResult(liteCollection.Delete(id)).ConfigureAwait(false);
}
public async Task<List<RelayServerNodeStoreInfo>> GetAll()
{
return await Task.FromResult(liteCollection.FindAll().ToList()).ConfigureAwait(false);
@@ -48,6 +56,10 @@ namespace linker.messenger.store.file.relay
DataRemain = info.DataRemain,
Name = info.Name,
Protocol = info.Protocol,
MasterKey = info.MasterKey,
Masters = info.Masters,
//是我初始化的,可以管理
Manageable = info.MasterKey == md5
}, c => c.NodeId == info.NodeId);
return await Task.FromResult(length > 0).ConfigureAwait(false); ;