mirror of
https://github.com/snltty/linker.git
synced 2025-10-24 17:40:27 +08:00
sync
This commit is contained in:
430
linker.messenger.serializer.memorypack/RelaySerializer.cs
Normal file
430
linker.messenger.serializer.memorypack/RelaySerializer.cs
Normal file
@@ -0,0 +1,430 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user