mirror of
https://github.com/snltty/linker.git
synced 2025-10-06 09:36:54 +08:00
431 lines
13 KiB
C#
431 lines
13 KiB
C#
using linker.messenger.relay.client.transport;
|
|
using linker.messenger.relay.server;
|
|
using MemoryPack;
|
|
using System.Net;
|
|
|
|
namespace linker.messenger.serializer.memorypack
|
|
{
|
|
[MemoryPackable]
|
|
public readonly partial struct SerializableRelayTestInfo
|
|
{
|
|
[MemoryPackIgnore]
|
|
public readonly RelayTestInfo info;
|
|
|
|
[MemoryPackInclude]
|
|
string MachineId => info.MachineId;
|
|
[MemoryPackInclude]
|
|
string SecretKey => info.SecretKey;
|
|
|
|
[MemoryPackInclude, MemoryPackAllowSerialize]
|
|
IPEndPoint Server => info.Server;
|
|
|
|
[MemoryPackConstructor]
|
|
SerializableRelayTestInfo(string machineId, string secretKey, IPEndPoint server)
|
|
{
|
|
var info = new RelayTestInfo { MachineId = machineId, SecretKey = secretKey, Server = server };
|
|
this.info = info;
|
|
}
|
|
|
|
public SerializableRelayTestInfo(RelayTestInfo info)
|
|
{
|
|
this.info = info;
|
|
}
|
|
}
|
|
public class RelayTestInfoFormatter : MemoryPackFormatter<RelayTestInfo>
|
|
{
|
|
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayTestInfo value)
|
|
{
|
|
if (value == null)
|
|
{
|
|
writer.WriteNullObjectHeader();
|
|
return;
|
|
}
|
|
|
|
writer.WritePackable(new SerializableRelayTestInfo(value));
|
|
}
|
|
|
|
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayTestInfo value)
|
|
{
|
|
if (reader.PeekIsNull())
|
|
{
|
|
reader.Advance(1); // skip null block
|
|
value = null;
|
|
return;
|
|
}
|
|
|
|
var wrapped = reader.ReadPackable<SerializableRelayTestInfo>();
|
|
value = wrapped.info;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[MemoryPackable]
|
|
public readonly partial struct SerializableRelayInfo
|
|
{
|
|
[MemoryPackIgnore]
|
|
public readonly RelayInfo info;
|
|
|
|
[MemoryPackInclude]
|
|
string FromMachineId => info.FromMachineId;
|
|
[MemoryPackInclude]
|
|
string FromMachineName => info.FromMachineName;
|
|
[MemoryPackInclude]
|
|
string RemoteMachineId => info.RemoteMachineId;
|
|
[MemoryPackInclude]
|
|
string RemoteMachineName => info.RemoteMachineName;
|
|
[MemoryPackInclude]
|
|
string TransactionId => info.TransactionId;
|
|
[MemoryPackInclude]
|
|
string SecretKey => info.SecretKey;
|
|
[MemoryPackInclude]
|
|
string TransportName => info.TransportName;
|
|
[MemoryPackInclude]
|
|
ulong FlowingId => info.FlowingId;
|
|
[MemoryPackInclude]
|
|
string NodeId => info.NodeId;
|
|
[MemoryPackInclude, MemoryPackAllowSerialize]
|
|
IPEndPoint Server => info.Server;
|
|
[MemoryPackInclude]
|
|
bool SSL => info.SSL;
|
|
|
|
[MemoryPackConstructor]
|
|
SerializableRelayInfo(string fromMachineId, string fromMachineName,
|
|
string remoteMachineId, string remoteMachineName,
|
|
string transactionId, string secretKey, string transportName, ulong flowingId,
|
|
string nodeId, IPEndPoint server, bool ssl)
|
|
{
|
|
var info = new RelayInfo
|
|
{
|
|
FlowingId = flowingId,
|
|
FromMachineId = fromMachineId,
|
|
FromMachineName = fromMachineName,
|
|
NodeId = nodeId,
|
|
RemoteMachineId = remoteMachineId,
|
|
RemoteMachineName = remoteMachineName,
|
|
SSL = ssl,
|
|
TransactionId = transactionId,
|
|
TransportName = transportName,
|
|
SecretKey = secretKey,
|
|
Server = server
|
|
};
|
|
this.info = info;
|
|
}
|
|
|
|
public SerializableRelayInfo(RelayInfo relayInfo)
|
|
{
|
|
this.info = relayInfo;
|
|
}
|
|
}
|
|
public class RelayInfoFormatter : MemoryPackFormatter<RelayInfo>
|
|
{
|
|
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayInfo value)
|
|
{
|
|
if (value == null)
|
|
{
|
|
writer.WriteNullObjectHeader();
|
|
return;
|
|
}
|
|
|
|
writer.WritePackable(new SerializableRelayInfo(value));
|
|
}
|
|
|
|
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayInfo value)
|
|
{
|
|
if (reader.PeekIsNull())
|
|
{
|
|
reader.Advance(1); // skip null block
|
|
value = null;
|
|
return;
|
|
}
|
|
|
|
var wrapped = reader.ReadPackable<SerializableRelayInfo>();
|
|
value = wrapped.info;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
[MemoryPackable]
|
|
public readonly partial struct SerializableRelayServerNodeReportInfo
|
|
{
|
|
[MemoryPackIgnore]
|
|
public readonly RelayServerNodeReportInfo info;
|
|
|
|
[MemoryPackInclude]
|
|
string Id => info.Id;
|
|
[MemoryPackInclude]
|
|
string Name => info.Name;
|
|
[MemoryPackInclude]
|
|
int MaxConnection => info.MaxConnection;
|
|
[MemoryPackInclude]
|
|
double MaxBandwidth => info.MaxBandwidth;
|
|
[MemoryPackInclude]
|
|
double MaxBandwidthTotal => info.MaxBandwidthTotal;
|
|
[MemoryPackInclude]
|
|
double MaxGbTotal => info.MaxGbTotal;
|
|
[MemoryPackInclude]
|
|
ulong MaxGbTotalLastBytes => info.MaxGbTotalLastBytes;
|
|
[MemoryPackInclude]
|
|
double ConnectionRatio => info.ConnectionRatio;
|
|
[MemoryPackInclude]
|
|
double BandwidthRatio => info.BandwidthRatio;
|
|
[MemoryPackInclude]
|
|
bool Public => info.Public;
|
|
[MemoryPackInclude]
|
|
int Delay => info.Delay;
|
|
[MemoryPackInclude, MemoryPackAllowSerialize]
|
|
IPEndPoint EndPoint => info.EndPoint;
|
|
[MemoryPackInclude]
|
|
long LastTicks => info.LastTicks;
|
|
|
|
[MemoryPackConstructor]
|
|
SerializableRelayServerNodeReportInfo(
|
|
string id, string name,
|
|
int maxConnection, double maxBandwidth, double maxBandwidthTotal,
|
|
double maxGbTotal, ulong maxGbTotalLastBytes,
|
|
double connectionRatio, double bandwidthRatio,
|
|
bool Public, int delay,
|
|
IPEndPoint endPoint, long lastTicks)
|
|
{
|
|
var info = new RelayServerNodeReportInfo
|
|
{
|
|
BandwidthRatio = bandwidthRatio,
|
|
ConnectionRatio = connectionRatio,
|
|
Delay = delay,
|
|
EndPoint = endPoint,
|
|
Id = id,
|
|
LastTicks = lastTicks,
|
|
MaxBandwidth = maxBandwidth,
|
|
MaxBandwidthTotal = maxBandwidthTotal,
|
|
MaxConnection = maxConnection,
|
|
MaxGbTotal = maxGbTotal,
|
|
MaxGbTotalLastBytes = maxGbTotalLastBytes,
|
|
Name = name,
|
|
Public = Public,
|
|
};
|
|
this.info = info;
|
|
}
|
|
|
|
public SerializableRelayServerNodeReportInfo(RelayServerNodeReportInfo info)
|
|
{
|
|
this.info = info;
|
|
}
|
|
}
|
|
public class RelayServerNodeReportInfoFormatter : MemoryPackFormatter<RelayServerNodeReportInfo>
|
|
{
|
|
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayServerNodeReportInfo value)
|
|
{
|
|
if (value == null)
|
|
{
|
|
writer.WriteNullObjectHeader();
|
|
return;
|
|
}
|
|
|
|
writer.WritePackable(new SerializableRelayServerNodeReportInfo(value));
|
|
}
|
|
|
|
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayServerNodeReportInfo value)
|
|
{
|
|
if (reader.PeekIsNull())
|
|
{
|
|
reader.Advance(1); // skip null block
|
|
value = null;
|
|
return;
|
|
}
|
|
|
|
var wrapped = reader.ReadPackable<SerializableRelayServerNodeReportInfo>();
|
|
value = wrapped.info;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
[MemoryPackable]
|
|
public readonly partial struct SerializableRelayAskResultInfo
|
|
{
|
|
[MemoryPackIgnore]
|
|
public readonly RelayAskResultInfo info;
|
|
|
|
[MemoryPackInclude]
|
|
ulong FlowingId => info.FlowingId;
|
|
[MemoryPackInclude]
|
|
List<RelayServerNodeReportInfo> Nodes => info.Nodes;
|
|
|
|
[MemoryPackConstructor]
|
|
SerializableRelayAskResultInfo(ulong flowingId, List<RelayServerNodeReportInfo> nodes)
|
|
{
|
|
var info = new RelayAskResultInfo { FlowingId = flowingId, Nodes = nodes };
|
|
this.info = info;
|
|
}
|
|
|
|
public SerializableRelayAskResultInfo(RelayAskResultInfo info)
|
|
{
|
|
this.info = info;
|
|
}
|
|
}
|
|
public class RelayAskResultInfoFormatter : MemoryPackFormatter<RelayAskResultInfo>
|
|
{
|
|
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayAskResultInfo value)
|
|
{
|
|
if (value == null)
|
|
{
|
|
writer.WriteNullObjectHeader();
|
|
return;
|
|
}
|
|
|
|
writer.WritePackable(new SerializableRelayAskResultInfo(value));
|
|
}
|
|
|
|
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayAskResultInfo value)
|
|
{
|
|
if (reader.PeekIsNull())
|
|
{
|
|
reader.Advance(1); // skip null block
|
|
value = null;
|
|
return;
|
|
}
|
|
|
|
var wrapped = reader.ReadPackable<SerializableRelayAskResultInfo>();
|
|
value = wrapped.info;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[MemoryPackable]
|
|
public readonly partial struct SerializableRelayCacheInfo
|
|
{
|
|
[MemoryPackIgnore]
|
|
public readonly RelayCacheInfo info;
|
|
|
|
[MemoryPackInclude]
|
|
ulong FlowId => info.FlowId;
|
|
[MemoryPackInclude]
|
|
string FromId => info.FromId;
|
|
[MemoryPackInclude]
|
|
string FromName => info.FromName;
|
|
[MemoryPackInclude]
|
|
string ToId => info.ToId;
|
|
[MemoryPackInclude]
|
|
string ToName => info.ToName;
|
|
[MemoryPackInclude]
|
|
string GroupId => info.GroupId;
|
|
|
|
[MemoryPackConstructor]
|
|
SerializableRelayCacheInfo(ulong flowId, string fromId, string fromName, string toId, string toName, string groupId)
|
|
{
|
|
var info = new RelayCacheInfo
|
|
{
|
|
FlowId = flowId,
|
|
FromId = fromId,
|
|
FromName = fromName,
|
|
GroupId = groupId,
|
|
ToId = toId,
|
|
ToName = toName,
|
|
};
|
|
this.info = info;
|
|
}
|
|
|
|
public SerializableRelayCacheInfo(RelayCacheInfo info)
|
|
{
|
|
this.info = info;
|
|
}
|
|
}
|
|
public class RelayCacheInfoFormatter : MemoryPackFormatter<RelayCacheInfo>
|
|
{
|
|
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayCacheInfo value)
|
|
{
|
|
if (value == null)
|
|
{
|
|
writer.WriteNullObjectHeader();
|
|
return;
|
|
}
|
|
|
|
writer.WritePackable(new SerializableRelayCacheInfo(value));
|
|
}
|
|
|
|
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayCacheInfo value)
|
|
{
|
|
if (reader.PeekIsNull())
|
|
{
|
|
reader.Advance(1); // skip null block
|
|
value = null;
|
|
return;
|
|
}
|
|
|
|
var wrapped = reader.ReadPackable<SerializableRelayCacheInfo>();
|
|
value = wrapped.info;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
[MemoryPackable]
|
|
public readonly partial struct SerializableRelayMessageInfo
|
|
{
|
|
[MemoryPackIgnore]
|
|
public readonly RelayMessageInfo info;
|
|
|
|
[MemoryPackInclude]
|
|
RelayMessengerType Type => info.Type;
|
|
[MemoryPackInclude]
|
|
ulong FlowId => info.FlowId;
|
|
[MemoryPackInclude]
|
|
string FromId => info.FromId;
|
|
[MemoryPackInclude]
|
|
string ToId => info.ToId;
|
|
[MemoryPackInclude]
|
|
string NodeId => info.NodeId;
|
|
|
|
[MemoryPackConstructor]
|
|
SerializableRelayMessageInfo(RelayMessengerType type, ulong flowId, string fromId, string toId, string nodeId)
|
|
{
|
|
var info = new RelayMessageInfo
|
|
{
|
|
Type = type,
|
|
FlowId = flowId,
|
|
FromId = fromId,
|
|
ToId = toId,
|
|
NodeId = nodeId
|
|
};
|
|
this.info = info;
|
|
}
|
|
|
|
public SerializableRelayMessageInfo(RelayMessageInfo info)
|
|
{
|
|
this.info = info;
|
|
}
|
|
}
|
|
public class RelayMessageInfoFormatter : MemoryPackFormatter<RelayMessageInfo>
|
|
{
|
|
public override void Serialize<TBufferWriter>(ref MemoryPackWriter<TBufferWriter> writer, scoped ref RelayMessageInfo value)
|
|
{
|
|
if (value == null)
|
|
{
|
|
writer.WriteNullObjectHeader();
|
|
return;
|
|
}
|
|
|
|
writer.WritePackable(new SerializableRelayMessageInfo(value));
|
|
}
|
|
|
|
public override void Deserialize(ref MemoryPackReader reader, scoped ref RelayMessageInfo value)
|
|
{
|
|
if (reader.PeekIsNull())
|
|
{
|
|
reader.Advance(1); // skip null block
|
|
value = null;
|
|
return;
|
|
}
|
|
|
|
var wrapped = reader.ReadPackable<SerializableRelayMessageInfo>();
|
|
value = wrapped.info;
|
|
}
|
|
}
|
|
}
|