second part of the previous commit
This commit is contained in:
parent
969b847c88
commit
ae8f51236c
|
@ -118,20 +118,28 @@ namespace AscNet.GameServer
|
||||||
|
|
||||||
public void SendPush<T>(T push)
|
public void SendPush<T>(T push)
|
||||||
{
|
{
|
||||||
Packet.Push packet = new()
|
try
|
||||||
{
|
{
|
||||||
Name = typeof(T).Name,
|
Packet.Push packet = new()
|
||||||
Content = MessagePackSerializer.Serialize(push)
|
{
|
||||||
};
|
Name = typeof(T).Name,
|
||||||
|
Content = MessagePackSerializer.Serialize(push)
|
||||||
|
};
|
||||||
|
|
||||||
Send(new Packet()
|
Packet pushPacket = new Packet()
|
||||||
|
{
|
||||||
|
No = packetNo,
|
||||||
|
Type = Packet.ContentType.Push,
|
||||||
|
Content = MessagePackSerializer.Serialize(packet)
|
||||||
|
};
|
||||||
|
|
||||||
|
Send(pushPacket);
|
||||||
|
packetNo++;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
No = packetNo,
|
c.Error(ex.Message);
|
||||||
Type = Packet.ContentType.Push,
|
}
|
||||||
Content = MessagePackSerializer.Serialize(packet)
|
|
||||||
});
|
|
||||||
c.Log(packet.Name);
|
|
||||||
packetNo++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendResponse<T>(T response)
|
public void SendResponse<T>(T response)
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\AscNet.Common\AscNet.Common.csproj" />
|
||||||
|
<ProjectReference Include="..\AscNet\AscNet.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
|
@ -0,0 +1,82 @@
|
||||||
|
using AscNet.Common.MsgPack;
|
||||||
|
using System.Text.Json;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System.Reflection;
|
||||||
|
using AscNet.GameServer;
|
||||||
|
using MessagePack;
|
||||||
|
using static AscNet.GameServer.Packet;
|
||||||
|
|
||||||
|
namespace AscNet.Test
|
||||||
|
{
|
||||||
|
internal class Program
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
string lines = File.ReadAllText("Data/NotifyLogin.json");
|
||||||
|
NotifyLogin notifyLogin = System.Text.Json.JsonSerializer.Deserialize<NotifyLogin>(lines)!;
|
||||||
|
NotifyLogin notifyLoginNew = JsonConvert.DeserializeObject<NotifyLogin>(lines)!;
|
||||||
|
|
||||||
|
foreach (PropertyCompareResult resultItem in Compare(notifyLogin, notifyLoginNew))
|
||||||
|
{
|
||||||
|
Console.WriteLine(" Property name: {0} -- old: {1}, new: {2}",
|
||||||
|
resultItem.Name, resultItem.OldValue ?? "<null>", resultItem.NewValue ?? "<null>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PropertyCompareResult
|
||||||
|
{
|
||||||
|
public string Name { get; private set; }
|
||||||
|
public object OldValue { get; private set; }
|
||||||
|
public object NewValue { get; private set; }
|
||||||
|
|
||||||
|
public PropertyCompareResult(string name, object oldValue, object newValue)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
OldValue = oldValue;
|
||||||
|
NewValue = newValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class IgnorePropertyCompareAttribute : Attribute { }
|
||||||
|
|
||||||
|
private static List<PropertyCompareResult> Compare<T>(T oldObject, T newObject, Type typecast = null)
|
||||||
|
{
|
||||||
|
PropertyInfo[] properties = null;
|
||||||
|
if (typecast != null)
|
||||||
|
{
|
||||||
|
properties = typecast.GetProperties();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
properties = typeof(T).GetProperties();
|
||||||
|
}
|
||||||
|
List<PropertyCompareResult> result = new List<PropertyCompareResult>();
|
||||||
|
|
||||||
|
foreach (PropertyInfo pi in properties)
|
||||||
|
{
|
||||||
|
if (pi.CustomAttributes.Any(ca => ca.AttributeType == typeof(IgnorePropertyCompareAttribute)))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
object oldValue = pi.GetValue(oldObject), newValue = pi.GetValue(newObject);
|
||||||
|
|
||||||
|
if (!object.Equals(oldValue, newValue))
|
||||||
|
{
|
||||||
|
PropertyInfo[] propertyInfos = oldValue.GetType().GetProperties();
|
||||||
|
if (propertyInfos.Length > 1 && oldValue.GetType().IsClass && !oldValue.GetType().IsArray && !oldValue.GetType().IsGenericType)
|
||||||
|
{
|
||||||
|
result.AddRange(Compare(oldValue, newValue, oldValue.GetType()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.Add(new PropertyCompareResult(pi.Name, oldValue, newValue));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
10
AscNet.sln
10
AscNet.sln
|
@ -3,13 +3,15 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.4.33205.214
|
VisualStudioVersion = 17.4.33205.214
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AscNet", "AscNet\AscNet.csproj", "{817773C2-B4F3-48D5-9CDE-977BB0A0920E}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AscNet", "AscNet\AscNet.csproj", "{817773C2-B4F3-48D5-9CDE-977BB0A0920E}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AscNet.Common", "AscNet.Common\AscNet.Common.csproj", "{BE6BB857-5DA2-4A7D-B8AB-6901460DC2B9}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AscNet.Common", "AscNet.Common\AscNet.Common.csproj", "{BE6BB857-5DA2-4A7D-B8AB-6901460DC2B9}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AscNet.SDKServer", "AscNet.SDKServer\AscNet.SDKServer.csproj", "{B5040F93-BA7F-4E76-AF54-E3FAA857A5DA}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AscNet.SDKServer", "AscNet.SDKServer\AscNet.SDKServer.csproj", "{B5040F93-BA7F-4E76-AF54-E3FAA857A5DA}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AscNet.GameServer", "AscNet.GameServer\AscNet.GameServer.csproj", "{EB20C0CB-7CA1-459F-8410-7A27CC99F98C}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AscNet.GameServer", "AscNet.GameServer\AscNet.GameServer.csproj", "{EB20C0CB-7CA1-459F-8410-7A27CC99F98C}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AscNet.Test", "AscNet.Test\AscNet.Test.csproj", "{DD4C8BB1-2422-4AA4-A12C-9B3A25873887}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
@ -33,6 +35,10 @@ Global
|
||||||
{EB20C0CB-7CA1-459F-8410-7A27CC99F98C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{EB20C0CB-7CA1-459F-8410-7A27CC99F98C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{EB20C0CB-7CA1-459F-8410-7A27CC99F98C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{EB20C0CB-7CA1-459F-8410-7A27CC99F98C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{EB20C0CB-7CA1-459F-8410-7A27CC99F98C}.Release|Any CPU.Build.0 = Release|Any CPU
|
{EB20C0CB-7CA1-459F-8410-7A27CC99F98C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{DD4C8BB1-2422-4AA4-A12C-9B3A25873887}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{DD4C8BB1-2422-4AA4-A12C-9B3A25873887}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{DD4C8BB1-2422-4AA4-A12C-9B3A25873887}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{DD4C8BB1-2422-4AA4-A12C-9B3A25873887}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
Loading…
Reference in New Issue