提交示例代码

This commit is contained in:
Bob.Song
2026-03-05 11:39:06 +08:00
commit 25958f58c3
2534 changed files with 209593 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,34 @@
using System.Runtime.Loader;
namespace Fantasy;
public static class AssemblyHelper
{
private const string HotfixDll = "Hotfix";
private static AssemblyLoadContext? _context = null;
public static System.Reflection.Assembly[] Assemblies
{
get
{
var assemblies = new System.Reflection.Assembly[2];
assemblies[0] = typeof(AssemblyHelper).Assembly;
assemblies[1] = LoadHotfixAssembly();
return assemblies;
}
}
private static System.Reflection.Assembly LoadHotfixAssembly()
{
if (_context != null)
{
_context.Unload();
System.GC.Collect();
}
_context = new AssemblyLoadContext(HotfixDll, true);
var dllBytes = File.ReadAllBytes(Path.Combine(Environment.CurrentDirectory, $"{HotfixDll}.dll"));
var pdbBytes = File.ReadAllBytes(Path.Combine(Environment.CurrentDirectory, $"{HotfixDll}.pdb"));
return _context.LoadFromStream(new MemoryStream(dllBytes), new MemoryStream(pdbBytes));
}
}

View File

@@ -0,0 +1,14 @@
using Fantasy.Entitas;
namespace Fantasy;
/// <summary>
/// 聊天中控中心
/// 1、申请、创建、解散聊天频道。
/// 2、管理聊天频道成员。
/// 3、根据频道ID找到对应的频道。
/// </summary>
public class ChatChannelCenterComponent : Entity
{
public readonly Dictionary<long, ChatChannelComponent> Channels = new();
}

View File

@@ -0,0 +1,16 @@
using Fantasy.Entitas;
// ReSharper disable ArrangeObjectCreationWhenTypeEvident
// ReSharper disable UsageOfDefaultStructEquality
namespace Fantasy;
/// <summary>
/// 聊天频道实体
/// 1、根据频道内的玩家进行广播聊天信息。
/// 2、当前频道如果没有玩家的话则自动销毁。
/// 3、存放当前频道的玩家信息。
/// </summary>
public sealed class ChatChannelComponent : Entity
{
public readonly HashSet<long> Units = new HashSet<long>();
}

View File

@@ -0,0 +1,8 @@
using Fantasy.Entitas;
namespace Fantasy;
public sealed class ChatUnitManageComponent : Entity
{
public readonly Dictionary<long, ChatUnit> Units = new();
}

View File

@@ -0,0 +1,49 @@
namespace Fantasy;
/// <summary>
/// 聊天频道类型
/// </summary>
[Flags]
public enum ChatChannelType
{
None = 0,
World = 1 << 1, // 世界频道
Private = 1 << 2, // 私聊频道
System = 1 << 3, // 系统频道
Broadcast = 1 << 4, // 广播频道
Notice = 1 << 5, // 公告频道
Team = 1 << 6, // 队伍频道
Near = 1 << 7, // 附近频道
CurrentMap = 1 << 8, // 当前地图频道
// 所有频道
All = World | Private | System | Broadcast | Notice | Team | Near,
// 其他聊天栏显示的频道
Display = World | Private | System | Broadcast | Notice | Team | Near | CurrentMap
}
/// <summary>
/// 聊天节点类型
/// </summary>
public enum ChatNodeType
{
None = 0,
Position = 1, // 位置节点
OpenUI = 2, // 打开UI节点
Link = 3, // 链接节点
Item = 4, // 物品节点
Text = 5, // 文本节点
Image = 6, // 图片节点
}
/// <summary>
/// 聊天节点事件类型
/// </summary>
public enum ChatNodeEvent
{
None = 0,
OpenUI = 1, // 打开UI节点
OpenLink = 2, // 点击链接节点
UseItem = 3, // 使用物品节点
Position = 4, // 位置节点
}

View File

@@ -0,0 +1,15 @@
using System.Runtime.Serialization;
using MongoDB.Bson.Serialization.Attributes;
using Newtonsoft.Json;
using ProtoBuf;
namespace Fantasy;
public partial class ChatInfoTree
{
[BsonIgnore]
[JsonIgnore]
[ProtoIgnore]
[IgnoreDataMember]
public Scene Scene { get; set; }
}

View File

@@ -0,0 +1,11 @@
using Fantasy.Entitas;
namespace Fantasy;
public sealed class ChatUnit : Entity
{
public string UserName;
public long GateRouteId;
public readonly Dictionary<long, ChatChannelComponent> Channels = new();
public readonly Dictionary<int, long> SendTime = new Dictionary<int, long>();
}

View File

@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Fantasy-Net" Version="2024.1.17" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,8 @@
using Fantasy.Entitas;
namespace Fantasy;
public sealed class GateUnitFlagComponent : Entity
{
public long GateUnitId { get; set; }
}

View File

@@ -0,0 +1,9 @@
using Fantasy.Entitas;
namespace Fantasy;
public sealed class GateUnitManageComponent : Entity
{
public readonly Dictionary<long, GateUnit> Units = new Dictionary<long, GateUnit>();
public readonly Dictionary<string, GateUnit> UnitsByUserName = new Dictionary<string, GateUnit>();
}

View File

@@ -0,0 +1,11 @@
using Fantasy.Entitas;
using Fantasy.Network;
namespace Fantasy;
public sealed class GateUnit : Entity
{
public EntityReference<Session> Session;
public string UserName { get; set; }
public readonly Dictionary<int, long> Routes = new Dictionary<int, long>();
}

View File

@@ -0,0 +1,27 @@
namespace Fantasy
{
// 生成器自动生成,请不要手动编辑。
public static class SceneType
{
public const int Authentication = 1;
public const int Addressable = 2;
public const int Gate = 3;
public const int Map = 4;
public const int CopyDispatcher = 5;
public const int CopyManager = 6;
public const int Copy = 7;
public const int Chat = 8;
public static readonly Dictionary<string, int> SceneTypeDic = new Dictionary<string, int>()
{
{ "Authentication", 1 },
{ "Addressable", 2 },
{ "Gate", 3 },
{ "Map", 4 },
{ "CopyDispatcher", 5 },
{ "CopyManager", 6 },
{ "Copy", 7 },
{ "Chat", 8 },
};
}
}

View File

@@ -0,0 +1,194 @@
using ProtoBuf;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
using Fantasy.Network.Interface;
using Fantasy.Serialize;
// ReSharper disable InconsistentNaming
// ReSharper disable RedundantUsingDirective
// ReSharper disable RedundantOverriddenMember
// ReSharper disable PartialTypeWithSinglePart
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable CheckNamespace
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
#pragma warning disable CS8618
namespace Fantasy
{
/// <summary>
/// Gate登录到Chat服务器
/// </summary>
[ProtoContract]
public partial class G2Chat_LoginRequest : AMessage, IRouteRequest, IProto
{
public static G2Chat_LoginRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<G2Chat_LoginRequest>();
}
public override void Dispose()
{
UserName = default;
UnitId = default;
GateRouteId = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<G2Chat_LoginRequest>(this);
#endif
}
[ProtoIgnore]
public Chat2G_LoginResponse ResponseType { get; set; }
public uint OpCode() { return InnerOpcode.G2Chat_LoginRequest; }
[ProtoMember(1)]
public string UserName { get; set; }
[ProtoMember(2)]
public long UnitId { get; set; }
[ProtoMember(3)]
public long GateRouteId { get; set; }
}
[ProtoContract]
public partial class Chat2G_LoginResponse : AMessage, IRouteResponse, IProto
{
public static Chat2G_LoginResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Chat2G_LoginResponse>();
}
public override void Dispose()
{
ErrorCode = default;
ChatRouteId = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Chat2G_LoginResponse>(this);
#endif
}
public uint OpCode() { return InnerOpcode.Chat2G_LoginResponse; }
[ProtoMember(1)]
public long ChatRouteId { get; set; }
[ProtoMember(2)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// Gate通知Chat服务器下线
/// </summary>
[ProtoContract]
public partial class G2Chat_OfflineRequest : AMessage, IRouteRequest, IProto
{
public static G2Chat_OfflineRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<G2Chat_OfflineRequest>();
}
public override void Dispose()
{
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<G2Chat_OfflineRequest>(this);
#endif
}
[ProtoIgnore]
public Chat2G_OfflineResponse ResponseType { get; set; }
public uint OpCode() { return InnerOpcode.G2Chat_OfflineRequest; }
}
[ProtoContract]
public partial class Chat2G_OfflineResponse : AMessage, IRouteResponse, IProto
{
public static Chat2G_OfflineResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Chat2G_OfflineResponse>();
}
public override void Dispose()
{
ErrorCode = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Chat2G_OfflineResponse>(this);
#endif
}
public uint OpCode() { return InnerOpcode.Chat2G_OfflineResponse; }
[ProtoMember(1)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// Chat通知Gate发送一个全服广播的聊天信息
/// </summary>
[ProtoContract]
public partial class Chat2G_ChatMessage : AMessage, IRouteMessage, IProto
{
public static Chat2G_ChatMessage Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Chat2G_ChatMessage>();
}
public override void Dispose()
{
ChatInfoTree = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Chat2G_ChatMessage>(this);
#endif
}
public uint OpCode() { return InnerOpcode.Chat2G_ChatMessage; }
[ProtoMember(1)]
public ChatInfoTree ChatInfoTree { get; set; }
}
/// <summary>
/// 其他服务器发送聊天消息到Chat
/// </summary>
[ProtoContract]
public partial class Other2Chat_ChatMessage : AMessage, IRouteMessage, IProto
{
public static Other2Chat_ChatMessage Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Other2Chat_ChatMessage>();
}
public override void Dispose()
{
ChatInfoTree = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Other2Chat_ChatMessage>(this);
#endif
}
public uint OpCode() { return InnerOpcode.Other2Chat_ChatMessage; }
[ProtoMember(1)]
public ChatInfoTree ChatInfoTree { get; set; }
}
/// <summary>
/// Gate登录到Map服务器
/// </summary>
[ProtoContract]
public partial class G2M_LoginRequest : AMessage, IRouteRequest, IProto
{
public static G2M_LoginRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<G2M_LoginRequest>();
}
public override void Dispose()
{
ChatUnitRouteId = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<G2M_LoginRequest>(this);
#endif
}
[ProtoIgnore]
public M2G_LoginResponse ResponseType { get; set; }
public uint OpCode() { return InnerOpcode.G2M_LoginRequest; }
[ProtoMember(1)]
public long ChatUnitRouteId { get; set; }
}
[ProtoContract]
public partial class M2G_LoginResponse : AMessage, IRouteResponse, IProto
{
public static M2G_LoginResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<M2G_LoginResponse>();
}
public override void Dispose()
{
ErrorCode = default;
MapRouteId = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<M2G_LoginResponse>(this);
#endif
}
public uint OpCode() { return InnerOpcode.M2G_LoginResponse; }
[ProtoMember(1)]
public long MapRouteId { get; set; }
[ProtoMember(2)]
public uint ErrorCode { get; set; }
}
}

View File

@@ -0,0 +1,14 @@
namespace Fantasy
{
public static partial class InnerOpcode
{
public const uint G2Chat_LoginRequest = 1073751825;
public const uint Chat2G_LoginResponse = 1207969553;
public const uint G2Chat_OfflineRequest = 1073751826;
public const uint Chat2G_OfflineResponse = 1207969554;
public const uint Chat2G_ChatMessage = 939534097;
public const uint Other2Chat_ChatMessage = 939534098;
public const uint G2M_LoginRequest = 1073751827;
public const uint M2G_LoginResponse = 1207969555;
}
}

View File

@@ -0,0 +1,327 @@
using ProtoBuf;
using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
using Fantasy.Network.Interface;
using Fantasy.Serialize;
// ReSharper disable InconsistentNaming
// ReSharper disable RedundantUsingDirective
// ReSharper disable RedundantOverriddenMember
// ReSharper disable PartialTypeWithSinglePart
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable CheckNamespace
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
#pragma warning disable CS8618
namespace Fantasy
{
/// <summary>
/// 登录游戏
/// </summary>
[ProtoContract]
public partial class C2G_LoginRequest : AMessage, IRequest, IProto
{
public static C2G_LoginRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2G_LoginRequest>();
}
public override void Dispose()
{
UserName = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2G_LoginRequest>(this);
#endif
}
[ProtoIgnore]
public G2C_LoginResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2G_LoginRequest; }
[ProtoMember(1)]
public string UserName { get; set; }
}
[ProtoContract]
public partial class G2C_LoginResponse : AMessage, IResponse, IProto
{
public static G2C_LoginResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<G2C_LoginResponse>();
}
public override void Dispose()
{
ErrorCode = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<G2C_LoginResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.G2C_LoginResponse; }
[ProtoMember(1)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// 退出游戏
/// </summary>
[ProtoContract]
public partial class C2G_ExitRequest : AMessage, IRequest, IProto
{
public static C2G_ExitRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2G_ExitRequest>();
}
public override void Dispose()
{
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2G_ExitRequest>(this);
#endif
}
[ProtoIgnore]
public G2C_ExitResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2G_ExitRequest; }
}
[ProtoContract]
public partial class G2C_ExitResponse : AMessage, IResponse, IProto
{
public static G2C_ExitResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<G2C_ExitResponse>();
}
public override void Dispose()
{
ErrorCode = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<G2C_ExitResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.G2C_ExitResponse; }
[ProtoMember(1)]
public uint ErrorCode { get; set; }
}
/// <summary>
/// 发送一个聊天消息给Chat服务器中间是经过Gate中转的
/// </summary>
[ProtoContract]
public partial class C2Chat_SendMessageRequest : AMessage, ICustomRouteRequest, IProto
{
public static C2Chat_SendMessageRequest Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<C2Chat_SendMessageRequest>();
}
public override void Dispose()
{
ChatInfoTree = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<C2Chat_SendMessageRequest>(this);
#endif
}
[ProtoIgnore]
public Chat2C_SendMessageResponse ResponseType { get; set; }
public uint OpCode() { return OuterOpcode.C2Chat_SendMessageRequest; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.ChatRoute;
[ProtoMember(1)]
public ChatInfoTree ChatInfoTree { get; set; }
}
[ProtoContract]
public partial class Chat2C_SendMessageResponse : AMessage, ICustomRouteResponse, IProto
{
public static Chat2C_SendMessageResponse Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Chat2C_SendMessageResponse>();
}
public override void Dispose()
{
ErrorCode = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Chat2C_SendMessageResponse>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Chat2C_SendMessageResponse; }
[ProtoMember(1)]
public uint ErrorCode { get; set; }
}
[ProtoContract]
public partial class Chat2C_Message : AMessage, ICustomRouteMessage, IProto
{
public static Chat2C_Message Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Chat2C_Message>();
}
public override void Dispose()
{
ChatInfoTree = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Chat2C_Message>(this);
#endif
}
public uint OpCode() { return OuterOpcode.Chat2C_Message; }
[ProtoIgnore]
public int RouteType => Fantasy.RouteType.ChatRoute;
[ProtoMember(1)]
public ChatInfoTree ChatInfoTree { get; set; }
}
/// <summary>
/// 聊天消息树
/// </summary>
[ProtoContract]
public partial class ChatInfoTree : AMessage, IProto
{
public static ChatInfoTree Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<ChatInfoTree>();
}
public override void Dispose()
{
ChatChannelType = default;
ChatChannelId = default;
UnitId = default;
UserName = default;
Target.Clear();
Node.Clear();
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<ChatInfoTree>(this);
#endif
}
[ProtoMember(1)]
public int ChatChannelType { get; set; }
[ProtoMember(2)]
public long ChatChannelId { get; set; }
[ProtoMember(3)]
public long UnitId { get; set; }
[ProtoMember(4)]
public string UserName { get; set; }
[ProtoMember(5)]
public List<long> Target = new List<long>();
[ProtoMember(6)]
public List<ChatInfoNode> Node = new List<ChatInfoNode>();
}
/// <summary>
/// 聊天信息节点
/// </summary>
[ProtoContract]
public partial class ChatInfoNode : AMessage, IProto
{
public static ChatInfoNode Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<ChatInfoNode>();
}
public override void Dispose()
{
ChatNodeType = default;
ChatNodeEvent = default;
Content = default;
Color = default;
Data = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<ChatInfoNode>(this);
#endif
}
[ProtoMember(1)]
public int ChatNodeType { get; set; }
[ProtoMember(2)]
public int ChatNodeEvent { get; set; }
[ProtoMember(3)]
public string Content { get; set; }
[ProtoMember(4)]
public string Color { get; set; }
[ProtoMember(5)]
public byte[] Data { get; set; }
}
/// <summary>
/// 聊天位置信息节点
/// </summary>
[ProtoContract]
public partial class ChatPositionNode : AMessage, IProto
{
public static ChatPositionNode Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<ChatPositionNode>();
}
public override void Dispose()
{
MapName = default;
PosX = default;
PosY = default;
PosZ = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<ChatPositionNode>(this);
#endif
}
[ProtoMember(1)]
public string MapName { get; set; }
[ProtoMember(2)]
public float PosX { get; set; }
[ProtoMember(3)]
public float PosY { get; set; }
[ProtoMember(4)]
public float PosZ { get; set; }
}
/// <summary>
/// 聊天位置信息节点
/// </summary>
[ProtoContract]
public partial class ChatOpenUINode : AMessage, IProto
{
public static ChatOpenUINode Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<ChatOpenUINode>();
}
public override void Dispose()
{
UIName = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<ChatOpenUINode>(this);
#endif
}
[ProtoMember(1)]
public string UIName { get; set; }
}
/// <summary>
/// 聊天连接信息节点
/// </summary>
[ProtoContract]
public partial class ChatLinkNode : AMessage, IProto
{
public static ChatLinkNode Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<ChatLinkNode>();
}
public override void Dispose()
{
Link = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<ChatLinkNode>(this);
#endif
}
[ProtoMember(1)]
public string Link { get; set; }
}
/// <summary>
/// 装备信息实体
/// </summary>
[ProtoContract]
public partial class Item : AMessage, IProto
{
public static Item Create(Scene scene)
{
return scene.MessagePoolComponent.Rent<Item>();
}
public override void Dispose()
{
Level = default;
Name = default;
HP = default;
MP = default;
#if FANTASY_NET || FANTASY_UNITY
GetScene().MessagePoolComponent.Return<Item>(this);
#endif
}
[ProtoMember(1)]
public string Level { get; set; }
[ProtoMember(2)]
public string Name { get; set; }
[ProtoMember(3)]
public string HP { get; set; }
[ProtoMember(4)]
public string MP { get; set; }
}
}

View File

@@ -0,0 +1,13 @@
namespace Fantasy
{
public static partial class OuterOpcode
{
public const uint C2G_LoginRequest = 268445457;
public const uint G2C_LoginResponse = 402663185;
public const uint C2G_ExitRequest = 268445458;
public const uint G2C_ExitResponse = 402663186;
public const uint C2Chat_SendMessageRequest = 2281711377;
public const uint Chat2C_SendMessageResponse = 2415929105;
public const uint Chat2C_Message = 2147493649;
}
}

View File

@@ -0,0 +1,9 @@
namespace Fantasy
{
// Route协议定义(需要定义1000以上、因为1000以内的框架预留)
public static class RouteType
{
public const int GateRoute = 1001; // Gate
public const int ChatRoute = 1002; // Chat
}
}

View File

@@ -0,0 +1,8 @@
using Fantasy.Entitas;
namespace Fantasy;
public sealed class EntityTimeoutComponent : Entity
{
public long TimerId;
}

View File

@@ -0,0 +1,12 @@
using Fantasy.Entitas;
using Fantasy.Network;
using Fantasy.Serialize;
using ProtoBuf.Serializers;
namespace Fantasy;
public class SerializerComponent : Entity
{
public ISerialize Serialize;
public readonly MemoryStreamBufferPool BufferPool = new MemoryStreamBufferPool();
}

View File

@@ -0,0 +1,311 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"Entity/1.0.0": {
"dependencies": {
"Fantasy-Net": "2024.1.17"
},
"runtime": {
"Entity.dll": {}
}
},
"CommandLineParser/2.9.1": {
"runtime": {
"lib/netstandard2.0/CommandLine.dll": {
"assemblyVersion": "2.9.1.0",
"fileVersion": "2.9.1.0"
}
}
},
"DnsClient/1.6.1": {
"dependencies": {
"Microsoft.Win32.Registry": "5.0.0"
},
"runtime": {
"lib/net5.0/DnsClient.dll": {
"assemblyVersion": "1.6.1.0",
"fileVersion": "1.6.1.0"
}
}
},
"Fantasy-Net/2024.1.17": {
"dependencies": {
"CommandLineParser": "2.9.1",
"MongoDB.Bson": "3.0.0",
"MongoDB.Driver": "3.0.0",
"Newtonsoft.Json": "13.0.3",
"System.IO.Pipelines": "8.0.0",
"protobuf-net": "3.2.45"
},
"runtime": {
"lib/net8.0/Fantasy-Net.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {},
"Microsoft.NETCore.Platforms/5.0.0": {},
"Microsoft.Win32.Registry/5.0.0": {
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"MongoDB.Bson/3.0.0": {
"dependencies": {
"System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"runtime": {
"lib/net6.0/MongoDB.Bson.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"MongoDB.Driver/3.0.0": {
"dependencies": {
"DnsClient": "1.6.1",
"Microsoft.Extensions.Logging.Abstractions": "2.0.0",
"MongoDB.Bson": "3.0.0",
"SharpCompress": "0.30.1",
"Snappier": "1.0.0",
"System.Buffers": "4.5.1",
"ZstdSharp.Port": "0.7.3"
},
"runtime": {
"lib/net6.0/MongoDB.Driver.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"Newtonsoft.Json/13.0.3": {
"runtime": {
"lib/net6.0/Newtonsoft.Json.dll": {
"assemblyVersion": "13.0.0.0",
"fileVersion": "13.0.3.27908"
}
}
},
"protobuf-net/3.2.45": {
"dependencies": {
"protobuf-net.Core": "3.2.45"
},
"runtime": {
"lib/net6.0/protobuf-net.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.2.45.36865"
}
}
},
"protobuf-net.Core/3.2.45": {
"dependencies": {
"System.Collections.Immutable": "7.0.0"
},
"runtime": {
"lib/net6.0/protobuf-net.Core.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.2.45.36865"
}
}
},
"SharpCompress/0.30.1": {
"runtime": {
"lib/net5.0/SharpCompress.dll": {
"assemblyVersion": "0.30.1.0",
"fileVersion": "0.30.1.0"
}
}
},
"Snappier/1.0.0": {
"runtime": {
"lib/net5.0/Snappier.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Buffers/4.5.1": {},
"System.Collections.Immutable/7.0.0": {},
"System.IO.Pipelines/8.0.0": {},
"System.Memory/4.5.5": {},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {},
"System.Security.AccessControl/5.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"System.Security.Principal.Windows/5.0.0": {},
"ZstdSharp.Port/0.7.3": {
"runtime": {
"lib/net7.0/ZstdSharp.dll": {
"assemblyVersion": "0.7.3.0",
"fileVersion": "0.7.3.0"
}
}
}
}
},
"libraries": {
"Entity/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"CommandLineParser/2.9.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==",
"path": "commandlineparser/2.9.1",
"hashPath": "commandlineparser.2.9.1.nupkg.sha512"
},
"DnsClient/1.6.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==",
"path": "dnsclient/1.6.1",
"hashPath": "dnsclient.1.6.1.nupkg.sha512"
},
"Fantasy-Net/2024.1.17": {
"type": "package",
"serviceable": true,
"sha512": "sha512-06mxvByfEvF/ELAiAjaea4aWI5IBbBDyH9sVdPxEOEEtpAbcguaiydUNi2CVBE+ppW+CYsznTXalN0Xk0vAMKQ==",
"path": "fantasy-net/2024.1.17",
"hashPath": "fantasy-net.2024.1.17.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6ZCllUYGFukkymSTx3Yr0G/ajRxoNJp7/FqSxSB4fGISST54ifBhgu4Nc0ItGi3i6DqwuNd8SUyObmiC++AO2Q==",
"path": "microsoft.extensions.logging.abstractions/2.0.0",
"hashPath": "microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
"path": "microsoft.netcore.platforms/5.0.0",
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"path": "microsoft.win32.registry/5.0.0",
"hashPath": "microsoft.win32.registry.5.0.0.nupkg.sha512"
},
"MongoDB.Bson/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-qnPRJ58HXDh7C4oxTf6YB7BJhlCGJIa6TMXhzImw6zk44lrAomQXTB6AtoQ5lNJbkyrgQcT7+smsKFMnXmLXhw==",
"path": "mongodb.bson/3.0.0",
"hashPath": "mongodb.bson.3.0.0.nupkg.sha512"
},
"MongoDB.Driver/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-udcP8rOhyuhLDn3sGVdNUgQSXfKGPaIP4w09XVKf4xdy66YSXinhkIuQSuOeZVHdTFsG2PpUbRx2wyFm7E0EMg==",
"path": "mongodb.driver/3.0.0",
"hashPath": "mongodb.driver.3.0.0.nupkg.sha512"
},
"Newtonsoft.Json/13.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
"path": "newtonsoft.json/13.0.3",
"hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
},
"protobuf-net/3.2.45": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5UZ/ukUHcGbFSl7vNMrHsfjqdxusdd9w7w0fCEXzf3UUtsrGNVCzV5SmF+sCHAbnRV2qPcD1ixiDP7Aj8lX/HA==",
"path": "protobuf-net/3.2.45",
"hashPath": "protobuf-net.3.2.45.nupkg.sha512"
},
"protobuf-net.Core/3.2.45": {
"type": "package",
"serviceable": true,
"sha512": "sha512-PMWatW2NrT1uTXD7etJ4VdQ0wWZLFrIfdRGppD2QX7nzZ0+kIzqhq551u6ZiXJHWJgG4hWFEkSnUnt2aB6posg==",
"path": "protobuf-net.core/3.2.45",
"hashPath": "protobuf-net.core.3.2.45.nupkg.sha512"
},
"SharpCompress/0.30.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==",
"path": "sharpcompress/0.30.1",
"hashPath": "sharpcompress.0.30.1.nupkg.sha512"
},
"Snappier/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==",
"path": "snappier/1.0.0",
"hashPath": "snappier.1.0.0.nupkg.sha512"
},
"System.Buffers/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"path": "system.buffers/4.5.1",
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
},
"System.Collections.Immutable/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==",
"path": "system.collections.immutable/7.0.0",
"hashPath": "system.collections.immutable.7.0.0.nupkg.sha512"
},
"System.IO.Pipelines/8.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
"path": "system.io.pipelines/8.0.0",
"hashPath": "system.io.pipelines.8.0.0.nupkg.sha512"
},
"System.Memory/4.5.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"path": "system.memory/4.5.5",
"hashPath": "system.memory.4.5.5.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
"path": "system.runtime.compilerservices.unsafe/5.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512"
},
"System.Security.AccessControl/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"path": "system.security.accesscontrol/5.0.0",
"hashPath": "system.security.accesscontrol.5.0.0.nupkg.sha512"
},
"System.Security.Principal.Windows/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==",
"path": "system.security.principal.windows/5.0.0",
"hashPath": "system.security.principal.windows.5.0.0.nupkg.sha512"
},
"ZstdSharp.Port/0.7.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-U9Ix4l4cl58Kzz1rJzj5hoVTjmbx1qGMwzAcbv1j/d3NzrFaESIurQyg+ow4mivCgkE3S413y+U9k4WdnEIkRA==",
"path": "zstdsharp.port/0.7.3",
"hashPath": "zstdsharp.port.0.7.3.nupkg.sha512"
}
}
}

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Entity")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Entity")]
[assembly: System.Reflection.AssemblyTitleAttribute("Entity")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// 由 MSBuild WriteCodeFragment 类生成。

View File

@@ -0,0 +1 @@
b7ceabf79c524d6ee0475da740239235018950a5f2c92d51c77f832004e64e6c

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Entity
build_property.ProjectDir = /Users/fantasy/Code/ServerLessions/Chat/Server/Entity/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@@ -0,0 +1 @@
fcf69390a646cc62907e4e23c3937a1cd98d98ea8d71ba412b22b845c334256c

View File

@@ -0,0 +1,12 @@
/Users/sining/Code/ServerLessions/Chat/Server/Entity/bin/Debug/net8.0/Entity.deps.json
/Users/sining/Code/ServerLessions/Chat/Server/Entity/bin/Debug/net8.0/Entity.dll
/Users/sining/Code/ServerLessions/Chat/Server/Entity/bin/Debug/net8.0/Entity.pdb
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/Entity.csproj.AssemblyReference.cache
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/Entity.GeneratedMSBuildEditorConfig.editorconfig
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/Entity.AssemblyInfoInputs.cache
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/Entity.AssemblyInfo.cs
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/Entity.csproj.CoreCompileInputs.cache
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/Entity.dll
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/refint/Entity.dll
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/Entity.pdb
/Users/sining/Code/ServerLessions/Chat/Server/Entity/obj/Debug/net8.0/ref/Entity.dll

View File

@@ -0,0 +1,73 @@
{
"format": 1,
"restore": {
"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj": {}
},
"projects": {
"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj",
"projectName": "Entity",
"projectPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj",
"packagesPath": "/Users/fantasy/.nuget/packages/",
"outputPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/obj/",
"projectStyle": "PackageReference",
"UsingMicrosoftNETSdk": false,
"configFilePaths": [
"/Users/fantasy/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"Fantasy-Net": {
"target": "Package",
"version": "[2024.1.17, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/9.0.100/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/Users/fantasy/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/Users/fantasy/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.12.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/Users/fantasy/.nuget/packages/" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)fantasy-net/2024.1.17/buildTransitive/Fantasy-Net.targets" Condition="Exists('$(NuGetPackageRoot)fantasy-net/2024.1.17/buildTransitive/Fantasy-Net.targets')" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,949 @@
{
"version": 3,
"targets": {
"net8.0": {
"CommandLineParser/2.9.1": {
"type": "package",
"compile": {
"lib/netstandard2.0/CommandLine.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/CommandLine.dll": {
"related": ".xml"
}
}
},
"DnsClient/1.6.1": {
"type": "package",
"dependencies": {
"Microsoft.Win32.Registry": "5.0.0"
},
"compile": {
"lib/net5.0/DnsClient.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net5.0/DnsClient.dll": {
"related": ".xml"
}
}
},
"Fantasy-Net/2024.1.17": {
"type": "package",
"dependencies": {
"CommandLineParser": "2.9.1",
"MongoDB.Bson": "3.0.0",
"MongoDB.Driver": "3.0.0",
"Newtonsoft.Json": "13.0.3",
"System.IO.Pipelines": "8.0.0",
"protobuf-net": "3.2.45"
},
"compile": {
"lib/net8.0/Fantasy-Net.dll": {}
},
"runtime": {
"lib/net8.0/Fantasy-Net.dll": {}
},
"frameworkReferences": [
"Microsoft.AspNetCore.App"
],
"build": {
"buildTransitive/Fantasy-Net.targets": {}
}
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {
"type": "package",
"compile": {
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.NETCore.Platforms/5.0.0": {
"type": "package",
"compile": {
"lib/netstandard1.0/_._": {}
},
"runtime": {
"lib/netstandard1.0/_._": {}
}
},
"Microsoft.Win32.Registry/5.0.0": {
"type": "package",
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
},
"compile": {
"ref/netstandard2.0/Microsoft.Win32.Registry.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"related": ".xml"
}
},
"runtimeTargets": {
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"assetType": "runtime",
"rid": "win"
}
}
},
"MongoDB.Bson/3.0.0": {
"type": "package",
"dependencies": {
"System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"compile": {
"lib/net6.0/MongoDB.Bson.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/MongoDB.Bson.dll": {
"related": ".xml"
}
}
},
"MongoDB.Driver/3.0.0": {
"type": "package",
"dependencies": {
"DnsClient": "1.6.1",
"Microsoft.Extensions.Logging.Abstractions": "2.0.0",
"MongoDB.Bson": "3.0.0",
"SharpCompress": "0.30.1",
"Snappier": "1.0.0",
"System.Buffers": "4.5.1",
"ZstdSharp.Port": "0.7.3"
},
"compile": {
"lib/net6.0/MongoDB.Driver.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/MongoDB.Driver.dll": {
"related": ".xml"
}
}
},
"Newtonsoft.Json/13.0.3": {
"type": "package",
"compile": {
"lib/net6.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
}
},
"protobuf-net/3.2.45": {
"type": "package",
"dependencies": {
"protobuf-net.Core": "3.2.45"
},
"compile": {
"lib/net6.0/protobuf-net.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/protobuf-net.dll": {
"related": ".xml"
}
}
},
"protobuf-net.Core/3.2.45": {
"type": "package",
"dependencies": {
"System.Collections.Immutable": "7.0.0"
},
"compile": {
"lib/net6.0/protobuf-net.Core.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/protobuf-net.Core.dll": {
"related": ".xml"
}
}
},
"SharpCompress/0.30.1": {
"type": "package",
"compile": {
"lib/net5.0/SharpCompress.dll": {}
},
"runtime": {
"lib/net5.0/SharpCompress.dll": {}
}
},
"Snappier/1.0.0": {
"type": "package",
"compile": {
"lib/net5.0/Snappier.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net5.0/Snappier.dll": {
"related": ".xml"
}
}
},
"System.Buffers/4.5.1": {
"type": "package",
"compile": {
"ref/netcoreapp2.0/_._": {}
},
"runtime": {
"lib/netcoreapp2.0/_._": {}
}
},
"System.Collections.Immutable/7.0.0": {
"type": "package",
"compile": {
"lib/net7.0/System.Collections.Immutable.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net7.0/System.Collections.Immutable.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"System.IO.Pipelines/8.0.0": {
"type": "package",
"compile": {
"lib/net8.0/System.IO.Pipelines.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/System.IO.Pipelines.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"System.Memory/4.5.5": {
"type": "package",
"compile": {
"ref/netcoreapp2.1/_._": {}
},
"runtime": {
"lib/netcoreapp2.1/_._": {}
}
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"type": "package",
"compile": {
"ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": {
"related": ".xml"
}
}
},
"System.Security.AccessControl/5.0.0": {
"type": "package",
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
},
"compile": {
"ref/netstandard2.0/System.Security.AccessControl.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/System.Security.AccessControl.dll": {
"related": ".xml"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": {
"assetType": "runtime",
"rid": "win"
}
}
},
"System.Security.Principal.Windows/5.0.0": {
"type": "package",
"compile": {
"ref/netcoreapp3.0/System.Security.Principal.Windows.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/System.Security.Principal.Windows.dll": {
"related": ".xml"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"assetType": "runtime",
"rid": "unix"
},
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"assetType": "runtime",
"rid": "win"
}
}
},
"ZstdSharp.Port/0.7.3": {
"type": "package",
"compile": {
"lib/net7.0/ZstdSharp.dll": {}
},
"runtime": {
"lib/net7.0/ZstdSharp.dll": {}
}
}
}
},
"libraries": {
"CommandLineParser/2.9.1": {
"sha512": "OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==",
"type": "package",
"path": "commandlineparser/2.9.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"CommandLine20.png",
"License.md",
"README.md",
"commandlineparser.2.9.1.nupkg.sha512",
"commandlineparser.nuspec",
"lib/net40/CommandLine.dll",
"lib/net40/CommandLine.xml",
"lib/net45/CommandLine.dll",
"lib/net45/CommandLine.xml",
"lib/net461/CommandLine.dll",
"lib/net461/CommandLine.xml",
"lib/netstandard2.0/CommandLine.dll",
"lib/netstandard2.0/CommandLine.xml"
]
},
"DnsClient/1.6.1": {
"sha512": "4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==",
"type": "package",
"path": "dnsclient/1.6.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"dnsclient.1.6.1.nupkg.sha512",
"dnsclient.nuspec",
"icon.png",
"lib/net45/DnsClient.dll",
"lib/net45/DnsClient.xml",
"lib/net471/DnsClient.dll",
"lib/net471/DnsClient.xml",
"lib/net5.0/DnsClient.dll",
"lib/net5.0/DnsClient.xml",
"lib/netstandard1.3/DnsClient.dll",
"lib/netstandard1.3/DnsClient.xml",
"lib/netstandard2.0/DnsClient.dll",
"lib/netstandard2.0/DnsClient.xml",
"lib/netstandard2.1/DnsClient.dll",
"lib/netstandard2.1/DnsClient.xml"
]
},
"Fantasy-Net/2024.1.17": {
"sha512": "06mxvByfEvF/ELAiAjaea4aWI5IBbBDyH9sVdPxEOEEtpAbcguaiydUNi2CVBE+ppW+CYsznTXalN0Xk0vAMKQ==",
"type": "package",
"path": "fantasy-net/2024.1.17",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE",
"README.md",
"buildTransitive/Fantasy-Net.targets",
"fantasy-net.2024.1.17.nupkg.sha512",
"fantasy-net.nuspec",
"icon.png",
"lib/net8.0/Fantasy-Net.dll"
]
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {
"sha512": "6ZCllUYGFukkymSTx3Yr0G/ajRxoNJp7/FqSxSB4fGISST54ifBhgu4Nc0ItGi3i6DqwuNd8SUyObmiC++AO2Q==",
"type": "package",
"path": "microsoft.extensions.logging.abstractions/2.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
"microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512",
"microsoft.extensions.logging.abstractions.nuspec"
]
},
"Microsoft.NETCore.Platforms/5.0.0": {
"sha512": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
"type": "package",
"path": "microsoft.netcore.platforms/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/netstandard1.0/_._",
"microsoft.netcore.platforms.5.0.0.nupkg.sha512",
"microsoft.netcore.platforms.nuspec",
"runtime.json",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"Microsoft.Win32.Registry/5.0.0": {
"sha512": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"type": "package",
"path": "microsoft.win32.registry/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net46/Microsoft.Win32.Registry.dll",
"lib/net461/Microsoft.Win32.Registry.dll",
"lib/net461/Microsoft.Win32.Registry.xml",
"lib/netstandard1.3/Microsoft.Win32.Registry.dll",
"lib/netstandard2.0/Microsoft.Win32.Registry.dll",
"lib/netstandard2.0/Microsoft.Win32.Registry.xml",
"microsoft.win32.registry.5.0.0.nupkg.sha512",
"microsoft.win32.registry.nuspec",
"ref/net46/Microsoft.Win32.Registry.dll",
"ref/net461/Microsoft.Win32.Registry.dll",
"ref/net461/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/Microsoft.Win32.Registry.dll",
"ref/netstandard1.3/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/de/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/es/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/it/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml",
"ref/netstandard2.0/Microsoft.Win32.Registry.dll",
"ref/netstandard2.0/Microsoft.Win32.Registry.xml",
"runtimes/win/lib/net46/Microsoft.Win32.Registry.dll",
"runtimes/win/lib/net461/Microsoft.Win32.Registry.dll",
"runtimes/win/lib/net461/Microsoft.Win32.Registry.xml",
"runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll",
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll",
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.xml",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"MongoDB.Bson/3.0.0": {
"sha512": "qnPRJ58HXDh7C4oxTf6YB7BJhlCGJIa6TMXhzImw6zk44lrAomQXTB6AtoQ5lNJbkyrgQcT7+smsKFMnXmLXhw==",
"type": "package",
"path": "mongodb.bson/3.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net472/MongoDB.Bson.dll",
"lib/net472/MongoDB.Bson.xml",
"lib/net6.0/MongoDB.Bson.dll",
"lib/net6.0/MongoDB.Bson.xml",
"lib/netstandard2.1/MongoDB.Bson.dll",
"lib/netstandard2.1/MongoDB.Bson.xml",
"mongodb.bson.3.0.0.nupkg.sha512",
"mongodb.bson.nuspec",
"packageIcon.png"
]
},
"MongoDB.Driver/3.0.0": {
"sha512": "udcP8rOhyuhLDn3sGVdNUgQSXfKGPaIP4w09XVKf4xdy66YSXinhkIuQSuOeZVHdTFsG2PpUbRx2wyFm7E0EMg==",
"type": "package",
"path": "mongodb.driver/3.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net472/MongoDB.Driver.dll",
"lib/net472/MongoDB.Driver.xml",
"lib/net6.0/MongoDB.Driver.dll",
"lib/net6.0/MongoDB.Driver.xml",
"lib/netstandard2.1/MongoDB.Driver.dll",
"lib/netstandard2.1/MongoDB.Driver.xml",
"mongodb.driver.3.0.0.nupkg.sha512",
"mongodb.driver.nuspec",
"packageIcon.png"
]
},
"Newtonsoft.Json/13.0.3": {
"sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
"type": "package",
"path": "newtonsoft.json/13.0.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.md",
"README.md",
"lib/net20/Newtonsoft.Json.dll",
"lib/net20/Newtonsoft.Json.xml",
"lib/net35/Newtonsoft.Json.dll",
"lib/net35/Newtonsoft.Json.xml",
"lib/net40/Newtonsoft.Json.dll",
"lib/net40/Newtonsoft.Json.xml",
"lib/net45/Newtonsoft.Json.dll",
"lib/net45/Newtonsoft.Json.xml",
"lib/net6.0/Newtonsoft.Json.dll",
"lib/net6.0/Newtonsoft.Json.xml",
"lib/netstandard1.0/Newtonsoft.Json.dll",
"lib/netstandard1.0/Newtonsoft.Json.xml",
"lib/netstandard1.3/Newtonsoft.Json.dll",
"lib/netstandard1.3/Newtonsoft.Json.xml",
"lib/netstandard2.0/Newtonsoft.Json.dll",
"lib/netstandard2.0/Newtonsoft.Json.xml",
"newtonsoft.json.13.0.3.nupkg.sha512",
"newtonsoft.json.nuspec",
"packageIcon.png"
]
},
"protobuf-net/3.2.45": {
"sha512": "5UZ/ukUHcGbFSl7vNMrHsfjqdxusdd9w7w0fCEXzf3UUtsrGNVCzV5SmF+sCHAbnRV2qPcD1ixiDP7Aj8lX/HA==",
"type": "package",
"path": "protobuf-net/3.2.45",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/net462/protobuf-net.dll",
"lib/net462/protobuf-net.xml",
"lib/net6.0/protobuf-net.dll",
"lib/net6.0/protobuf-net.xml",
"lib/netstandard2.0/protobuf-net.dll",
"lib/netstandard2.0/protobuf-net.xml",
"lib/netstandard2.1/protobuf-net.dll",
"lib/netstandard2.1/protobuf-net.xml",
"protobuf-net.3.2.45.nupkg.sha512",
"protobuf-net.nuspec",
"protobuf-net.png",
"readme.md"
]
},
"protobuf-net.Core/3.2.45": {
"sha512": "PMWatW2NrT1uTXD7etJ4VdQ0wWZLFrIfdRGppD2QX7nzZ0+kIzqhq551u6ZiXJHWJgG4hWFEkSnUnt2aB6posg==",
"type": "package",
"path": "protobuf-net.core/3.2.45",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/net462/protobuf-net.Core.dll",
"lib/net462/protobuf-net.Core.xml",
"lib/net6.0/protobuf-net.Core.dll",
"lib/net6.0/protobuf-net.Core.xml",
"lib/netstandard2.0/protobuf-net.Core.dll",
"lib/netstandard2.0/protobuf-net.Core.xml",
"lib/netstandard2.1/protobuf-net.Core.dll",
"lib/netstandard2.1/protobuf-net.Core.xml",
"protobuf-net.core.3.2.45.nupkg.sha512",
"protobuf-net.core.nuspec",
"protobuf-net.png",
"readme.md"
]
},
"SharpCompress/0.30.1": {
"sha512": "XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==",
"type": "package",
"path": "sharpcompress/0.30.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/net461/SharpCompress.dll",
"lib/net5.0/SharpCompress.dll",
"lib/netcoreapp3.1/SharpCompress.dll",
"lib/netstandard2.0/SharpCompress.dll",
"lib/netstandard2.1/SharpCompress.dll",
"sharpcompress.0.30.1.nupkg.sha512",
"sharpcompress.nuspec"
]
},
"Snappier/1.0.0": {
"sha512": "rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==",
"type": "package",
"path": "snappier/1.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"COPYING.txt",
"lib/net5.0/Snappier.dll",
"lib/net5.0/Snappier.xml",
"lib/netcoreapp3.0/Snappier.dll",
"lib/netcoreapp3.0/Snappier.xml",
"lib/netstandard2.0/Snappier.dll",
"lib/netstandard2.0/Snappier.xml",
"lib/netstandard2.1/Snappier.dll",
"lib/netstandard2.1/Snappier.xml",
"snappier.1.0.0.nupkg.sha512",
"snappier.nuspec"
]
},
"System.Buffers/4.5.1": {
"sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"type": "package",
"path": "system.buffers/4.5.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net461/System.Buffers.dll",
"lib/net461/System.Buffers.xml",
"lib/netcoreapp2.0/_._",
"lib/netstandard1.1/System.Buffers.dll",
"lib/netstandard1.1/System.Buffers.xml",
"lib/netstandard2.0/System.Buffers.dll",
"lib/netstandard2.0/System.Buffers.xml",
"lib/uap10.0.16299/_._",
"ref/net45/System.Buffers.dll",
"ref/net45/System.Buffers.xml",
"ref/netcoreapp2.0/_._",
"ref/netstandard1.1/System.Buffers.dll",
"ref/netstandard1.1/System.Buffers.xml",
"ref/netstandard2.0/System.Buffers.dll",
"ref/netstandard2.0/System.Buffers.xml",
"ref/uap10.0.16299/_._",
"system.buffers.4.5.1.nupkg.sha512",
"system.buffers.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Collections.Immutable/7.0.0": {
"sha512": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==",
"type": "package",
"path": "system.collections.immutable/7.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"README.md",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.Collections.Immutable.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets",
"lib/net462/System.Collections.Immutable.dll",
"lib/net462/System.Collections.Immutable.xml",
"lib/net6.0/System.Collections.Immutable.dll",
"lib/net6.0/System.Collections.Immutable.xml",
"lib/net7.0/System.Collections.Immutable.dll",
"lib/net7.0/System.Collections.Immutable.xml",
"lib/netstandard2.0/System.Collections.Immutable.dll",
"lib/netstandard2.0/System.Collections.Immutable.xml",
"system.collections.immutable.7.0.0.nupkg.sha512",
"system.collections.immutable.nuspec",
"useSharedDesignerContext.txt"
]
},
"System.IO.Pipelines/8.0.0": {
"sha512": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
"type": "package",
"path": "system.io.pipelines/8.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.IO.Pipelines.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets",
"lib/net462/System.IO.Pipelines.dll",
"lib/net462/System.IO.Pipelines.xml",
"lib/net6.0/System.IO.Pipelines.dll",
"lib/net6.0/System.IO.Pipelines.xml",
"lib/net7.0/System.IO.Pipelines.dll",
"lib/net7.0/System.IO.Pipelines.xml",
"lib/net8.0/System.IO.Pipelines.dll",
"lib/net8.0/System.IO.Pipelines.xml",
"lib/netstandard2.0/System.IO.Pipelines.dll",
"lib/netstandard2.0/System.IO.Pipelines.xml",
"system.io.pipelines.8.0.0.nupkg.sha512",
"system.io.pipelines.nuspec",
"useSharedDesignerContext.txt"
]
},
"System.Memory/4.5.5": {
"sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"type": "package",
"path": "system.memory/4.5.5",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net461/System.Memory.dll",
"lib/net461/System.Memory.xml",
"lib/netcoreapp2.1/_._",
"lib/netstandard1.1/System.Memory.dll",
"lib/netstandard1.1/System.Memory.xml",
"lib/netstandard2.0/System.Memory.dll",
"lib/netstandard2.0/System.Memory.xml",
"ref/netcoreapp2.1/_._",
"system.memory.4.5.5.nupkg.sha512",
"system.memory.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"sha512": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
"type": "package",
"path": "system.runtime.compilerservices.unsafe/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net45/System.Runtime.CompilerServices.Unsafe.dll",
"lib/net45/System.Runtime.CompilerServices.Unsafe.xml",
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll",
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml",
"lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll",
"lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml",
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
"ref/net461/System.Runtime.CompilerServices.Unsafe.dll",
"ref/net461/System.Runtime.CompilerServices.Unsafe.xml",
"ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll",
"ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml",
"ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
"ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
"ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll",
"ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.xml",
"system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
"system.runtime.compilerservices.unsafe.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Security.AccessControl/5.0.0": {
"sha512": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"type": "package",
"path": "system.security.accesscontrol/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net46/System.Security.AccessControl.dll",
"lib/net461/System.Security.AccessControl.dll",
"lib/net461/System.Security.AccessControl.xml",
"lib/netstandard1.3/System.Security.AccessControl.dll",
"lib/netstandard2.0/System.Security.AccessControl.dll",
"lib/netstandard2.0/System.Security.AccessControl.xml",
"lib/uap10.0.16299/_._",
"ref/net46/System.Security.AccessControl.dll",
"ref/net461/System.Security.AccessControl.dll",
"ref/net461/System.Security.AccessControl.xml",
"ref/netstandard1.3/System.Security.AccessControl.dll",
"ref/netstandard1.3/System.Security.AccessControl.xml",
"ref/netstandard1.3/de/System.Security.AccessControl.xml",
"ref/netstandard1.3/es/System.Security.AccessControl.xml",
"ref/netstandard1.3/fr/System.Security.AccessControl.xml",
"ref/netstandard1.3/it/System.Security.AccessControl.xml",
"ref/netstandard1.3/ja/System.Security.AccessControl.xml",
"ref/netstandard1.3/ko/System.Security.AccessControl.xml",
"ref/netstandard1.3/ru/System.Security.AccessControl.xml",
"ref/netstandard1.3/zh-hans/System.Security.AccessControl.xml",
"ref/netstandard1.3/zh-hant/System.Security.AccessControl.xml",
"ref/netstandard2.0/System.Security.AccessControl.dll",
"ref/netstandard2.0/System.Security.AccessControl.xml",
"ref/uap10.0.16299/_._",
"runtimes/win/lib/net46/System.Security.AccessControl.dll",
"runtimes/win/lib/net461/System.Security.AccessControl.dll",
"runtimes/win/lib/net461/System.Security.AccessControl.xml",
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll",
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.xml",
"runtimes/win/lib/netstandard1.3/System.Security.AccessControl.dll",
"runtimes/win/lib/uap10.0.16299/_._",
"system.security.accesscontrol.5.0.0.nupkg.sha512",
"system.security.accesscontrol.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Security.Principal.Windows/5.0.0": {
"sha512": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==",
"type": "package",
"path": "system.security.principal.windows/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net46/System.Security.Principal.Windows.dll",
"lib/net461/System.Security.Principal.Windows.dll",
"lib/net461/System.Security.Principal.Windows.xml",
"lib/netstandard1.3/System.Security.Principal.Windows.dll",
"lib/netstandard2.0/System.Security.Principal.Windows.dll",
"lib/netstandard2.0/System.Security.Principal.Windows.xml",
"lib/uap10.0.16299/_._",
"ref/net46/System.Security.Principal.Windows.dll",
"ref/net461/System.Security.Principal.Windows.dll",
"ref/net461/System.Security.Principal.Windows.xml",
"ref/netcoreapp3.0/System.Security.Principal.Windows.dll",
"ref/netcoreapp3.0/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/System.Security.Principal.Windows.dll",
"ref/netstandard1.3/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/de/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/es/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/fr/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/it/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/ja/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/ko/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/ru/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml",
"ref/netstandard2.0/System.Security.Principal.Windows.dll",
"ref/netstandard2.0/System.Security.Principal.Windows.xml",
"ref/uap10.0.16299/_._",
"runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll",
"runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml",
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll",
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml",
"runtimes/win/lib/net46/System.Security.Principal.Windows.dll",
"runtimes/win/lib/net461/System.Security.Principal.Windows.dll",
"runtimes/win/lib/net461/System.Security.Principal.Windows.xml",
"runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll",
"runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml",
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll",
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml",
"runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll",
"runtimes/win/lib/uap10.0.16299/_._",
"system.security.principal.windows.5.0.0.nupkg.sha512",
"system.security.principal.windows.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"ZstdSharp.Port/0.7.3": {
"sha512": "U9Ix4l4cl58Kzz1rJzj5hoVTjmbx1qGMwzAcbv1j/d3NzrFaESIurQyg+ow4mivCgkE3S413y+U9k4WdnEIkRA==",
"type": "package",
"path": "zstdsharp.port/0.7.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/net461/ZstdSharp.dll",
"lib/net5.0/ZstdSharp.dll",
"lib/net6.0/ZstdSharp.dll",
"lib/net7.0/ZstdSharp.dll",
"lib/netcoreapp3.1/ZstdSharp.dll",
"lib/netstandard2.0/ZstdSharp.dll",
"lib/netstandard2.1/ZstdSharp.dll",
"zstdsharp.port.0.7.3.nupkg.sha512",
"zstdsharp.port.nuspec"
]
}
},
"projectFileDependencyGroups": {
"net8.0": [
"Fantasy-Net >= 2024.1.17"
]
},
"packageFolders": {
"/Users/fantasy/.nuget/packages/": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj",
"projectName": "Entity",
"projectPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj",
"packagesPath": "/Users/fantasy/.nuget/packages/",
"outputPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/obj/",
"projectStyle": "PackageReference",
"UsingMicrosoftNETSdk": false,
"configFilePaths": [
"/Users/fantasy/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"Fantasy-Net": {
"target": "Package",
"version": "[2024.1.17, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/9.0.100/PortableRuntimeIdentifierGraph.json"
}
}
}
}

View File

@@ -0,0 +1,30 @@
{
"version": 2,
"dgSpecHash": "bL6AX114Taw=",
"success": true,
"projectFilePath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj",
"expectedPackageFiles": [
"/Users/fantasy/.nuget/packages/commandlineparser/2.9.1/commandlineparser.2.9.1.nupkg.sha512",
"/Users/fantasy/.nuget/packages/dnsclient/1.6.1/dnsclient.1.6.1.nupkg.sha512",
"/Users/fantasy/.nuget/packages/fantasy-net/2024.1.17/fantasy-net.2024.1.17.nupkg.sha512",
"/Users/fantasy/.nuget/packages/microsoft.extensions.logging.abstractions/2.0.0/microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/microsoft.netcore.platforms/5.0.0/microsoft.netcore.platforms.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/microsoft.win32.registry/5.0.0/microsoft.win32.registry.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/mongodb.bson/3.0.0/mongodb.bson.3.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/mongodb.driver/3.0.0/mongodb.driver.3.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/newtonsoft.json/13.0.3/newtonsoft.json.13.0.3.nupkg.sha512",
"/Users/fantasy/.nuget/packages/protobuf-net/3.2.45/protobuf-net.3.2.45.nupkg.sha512",
"/Users/fantasy/.nuget/packages/protobuf-net.core/3.2.45/protobuf-net.core.3.2.45.nupkg.sha512",
"/Users/fantasy/.nuget/packages/sharpcompress/0.30.1/sharpcompress.0.30.1.nupkg.sha512",
"/Users/fantasy/.nuget/packages/snappier/1.0.0/snappier.1.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.buffers/4.5.1/system.buffers.4.5.1.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.collections.immutable/7.0.0/system.collections.immutable.7.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.io.pipelines/8.0.0/system.io.pipelines.8.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.memory/4.5.5/system.memory.4.5.5.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.runtime.compilerservices.unsafe/5.0.0/system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.security.accesscontrol/5.0.0/system.security.accesscontrol.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.security.principal.windows/5.0.0/system.security.principal.windows.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/zstdsharp.port/0.7.3/zstdsharp.port.0.7.3.nupkg.sha512"
],
"logs": []
}

View File

@@ -0,0 +1 @@
"restore":{"projectUniqueName":"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj","projectName":"Entity","projectPath":"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj","outputPath":"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/obj/","projectStyle":"PackageReference","UsingMicrosoftNETSdk":false,"originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"all"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"Fantasy-Net":{"target":"Package","version":"[2024.1.17, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/sdk/9.0.100/PortableRuntimeIdentifierGraph.json"}}

View File

@@ -0,0 +1 @@
17324493181399999

View File

@@ -0,0 +1 @@
17331012454241067

View File

@@ -0,0 +1,20 @@
using Fantasy.Async;
using Fantasy.Entitas;
using Fantasy.Network.Interface;
namespace Fantasy;
public sealed class G2Chat_LoginRequestHandler : RouteRPC<Scene, G2Chat_LoginRequest, Chat2G_LoginResponse>
{
protected override async FTask Run(Scene scene, G2Chat_LoginRequest request, Chat2G_LoginResponse response, Action reply)
{
var chatUnit = scene.GetComponent<ChatUnitManageComponent>().Add(request.UnitId, request.UserName, request.GateRouteId);
response.ChatRouteId = chatUnit.RunTimeId;
// 这里模拟创建一个频道用于测试用
var chatChannelCenterComponent = scene.GetComponent<ChatChannelCenterComponent>();
var chatChannelComponent = chatChannelCenterComponent.Apply(1);
// 加入到聊天频道
chatChannelComponent.JoinChannel(request.UnitId);
await FTask.CompletedTask;
}
}

View File

@@ -0,0 +1,13 @@
using Fantasy.Async;
using Fantasy.Network.Interface;
namespace Fantasy;
public sealed class G2Chat_OfflineRequestHandler : RouteRPC<ChatUnit, G2Chat_OfflineRequest, Chat2G_OfflineResponse>
{
protected override async FTask Run(ChatUnit chatUnit, G2Chat_OfflineRequest request, Chat2G_OfflineResponse response, Action reply)
{
await FTask.CompletedTask;
chatUnit.Scene.GetComponent<ChatUnitManageComponent>().Remove(chatUnit.Id);
}
}

View File

@@ -0,0 +1,19 @@
using Fantasy.Async;
using Fantasy.Network.Interface;
namespace Fantasy;
public sealed class Other2Chat_ChatMessageHandler : Route<ChatUnit, Other2Chat_ChatMessage>
{
protected override async FTask Run(ChatUnit chatUnit, Other2Chat_ChatMessage message)
{
var result = ChatSceneHelper.Distribution(chatUnit, message.ChatInfoTree, false);
if (result != 0)
{
Log.Warning($"Other2Chat_ChatMessageHandler: Distribution failed, result: {result}");
}
await FTask.CompletedTask;
}
}

View File

@@ -0,0 +1,13 @@
using Fantasy.Async;
using Fantasy.Network.Interface;
namespace Fantasy;
public sealed class C2Chat_SendMessageRequestHandler : RouteRPC<ChatUnit, C2Chat_SendMessageRequest, Chat2C_SendMessageResponse>
{
protected override async FTask Run(ChatUnit chatUnit, C2Chat_SendMessageRequest request, Chat2C_SendMessageResponse response, Action reply)
{
response.ErrorCode = ChatSceneHelper.Distribution(chatUnit, request.ChatInfoTree);
await FTask.CompletedTask;
}
}

View File

@@ -0,0 +1,37 @@
namespace Fantasy;
public static class ChatChannelCenterHelper
{
/// <summary>
/// 申请一个频道
/// </summary>
/// <param name="scene"></param>
/// <param name="channelId"></param>
/// <returns></returns>
public static ChatChannelComponent Apply(Scene scene, long channelId)
{
return scene.GetComponent<ChatChannelCenterComponent>().Apply(channelId);
}
/// <summary>
/// 尝试获取一个频道
/// </summary>
/// <param name="scene"></param>
/// <param name="channelId"></param>
/// <param name="channel"></param>
/// <returns></returns>
public static bool TryGet(Scene scene, long channelId, out ChatChannelComponent channel)
{
return scene.GetComponent<ChatChannelCenterComponent>().TryGet(channelId, out channel);
}
/// <summary>
/// 解散一个频道
/// </summary>
/// <param name="scene"></param>
/// <param name="channelId"></param>
public static void Disband(Scene scene, long channelId)
{
scene.GetComponent<ChatChannelCenterComponent>().Disband(channelId);
}
}

View File

@@ -0,0 +1,28 @@
using Fantasy.Platform.Net;
namespace Fantasy;
public static class ChatHelper
{
/// <summary>
/// 发送一个聊天消息给ChatScene不能在ChatScene中调用
/// </summary>
/// <param name="scene"></param>
/// <param name="chatUnitRouteId"></param>
/// <param name="tree"></param>
public static void SendChatMessage(Scene scene, long chatUnitRouteId, ChatInfoTree tree)
{
if (scene.SceneType == SceneType.Chat)
{
Log.Warning("ChatHelper.SendChatMessage: scene is not a chat scene.");
return;
}
var other2ChatChatMessage = new Other2Chat_ChatMessage()
{
ChatInfoTree = tree
};
scene.NetworkMessagingComponent.SendInnerRoute(chatUnitRouteId, other2ChatChatMessage);
}
}

View File

@@ -0,0 +1,126 @@
namespace Fantasy
{
/// <summary>
/// 聊天信息节点
/// </summary>
public static class ChatNodeFactory
{
/// <summary>
/// 添加文本节点
/// </summary>
/// <param name="chatInfoTree"></param>
/// <param name="content"></param>
/// <returns></returns>
public static ChatInfoTree AddendTextNode(this ChatInfoTree chatInfoTree, string content)
{
var chatInfoNode = new ChatInfoNode()
{
ChatNodeType = (int)ChatNodeType.Text,
Content = content
};
chatInfoTree.Node.Add(chatInfoNode);
return chatInfoTree;
}
/// <summary>
/// 添加链接节点
/// </summary>
/// <param name="chatInfoTree"></param>
/// <param name="content"></param>
/// <param name="link"></param>
/// <returns></returns>
public static ChatInfoTree AddendLinkNode(this ChatInfoTree chatInfoTree, string content,string link)
{
var chatLinkNode = new ChatLinkNode()
{
Link = link
};
var serializerComponent = chatInfoTree.Scene.GetComponent<SerializerComponent>();
var chatInfoNode = new ChatInfoNode()
{
ChatNodeType = (int)ChatNodeType.Link,
ChatNodeEvent = (int)ChatNodeEvent.OpenLink,
Content = content,
Data = serializerComponent.Serialize(chatLinkNode)
};
chatInfoTree.Node.Add(chatInfoNode);
return chatInfoTree;
}
/// <summary>
/// 添加图片节点
/// </summary>
/// <param name="chatInfoTree"></param>
/// <param name="content"></param>
/// <returns></returns>
public static ChatInfoTree AddendImageNode(this ChatInfoTree chatInfoTree, string content)
{
var chatInfoNode = new ChatInfoNode()
{
ChatNodeType = (int)ChatNodeType.Image,
Content = content
};
chatInfoTree.Node.Add(chatInfoNode);
return chatInfoTree;
}
/// <summary>
/// 添加打开UI节点
/// </summary>
/// <param name="chatInfoTree"></param>
/// <param name="content"></param>
/// <param name="uiName"></param>
/// <returns></returns>
public static ChatInfoTree AddendOpenUINode(this ChatInfoTree chatInfoTree, string content,string uiName)
{
var chatOpenUINode = new ChatOpenUINode()
{
UIName = uiName
};
var serializerComponent = chatInfoTree.Scene.GetComponent<SerializerComponent>();
var chatInfoNode = new ChatInfoNode()
{
ChatNodeType = (int)ChatNodeType.OpenUI,
ChatNodeEvent = (int)ChatNodeEvent.OpenUI,
Content = content,
Data = serializerComponent.Serialize(chatOpenUINode)
};
chatInfoTree.Node.Add(chatInfoNode);
return chatInfoTree;
}
/// <summary>
/// 添加位置节点
/// </summary>
/// <param name="chatInfoTree"></param>
/// <param name="content"></param>
/// <param name="mapName"></param>
/// <param name="mapX"></param>
/// <param name="mapY"></param>
/// <param name="mapZ"></param>
/// <returns></returns>
public static ChatInfoTree AddendPositionNode(this ChatInfoTree chatInfoTree, string content, string mapName,
float mapX, float mapY, float mapZ)
{
var chatPositionNode = new ChatPositionNode()
{
MapName = mapName,
PosX = mapX,
PosY = mapY,
PosZ = mapZ,
};
var serializerComponent = chatInfoTree.Scene.GetComponent<SerializerComponent>();
var chatInfoNode = new ChatInfoNode()
{
ChatNodeType = (int)ChatNodeType.Position,
ChatNodeEvent = (int)ChatNodeEvent.Position,
Content = content,
Data = serializerComponent.Serialize(chatPositionNode)
};
chatInfoTree.Node.Add(chatInfoNode);
return chatInfoTree;
}
}
}

View File

@@ -0,0 +1,248 @@
using System.Threading.Channels;
using Fantasy.Helper;
using Fantasy.Platform.Net;
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
namespace Fantasy;
public static class ChatSceneHelper
{
private const int ChatCD = 1000;
private const int MaxTextLength = 10;
private const int MaxShowItemCount = 2;
/// <summary>
/// 聊天消息分发入口
/// </summary>
/// <param name="chatUnit"></param>
/// <param name="tree"></param>
/// <param name="isCheckSendTime"></param>
/// <returns></returns>
public static uint Distribution(ChatUnit chatUnit, ChatInfoTree tree, bool isCheckSendTime = true)
{
var result = Condition(chatUnit, tree, isCheckSendTime);
if (result != 0)
{
return result;
}
switch ((ChatChannelType)tree.ChatChannelType)
{
case ChatChannelType.Broadcast:
{
Broadcast(chatUnit.Scene, tree);
return 0;
}
case ChatChannelType.Team:
{
return Channel(chatUnit, tree);
}
case ChatChannelType.Private:
{
return Private(chatUnit, tree);
}
default:
{
// 这个1代表当前频道不存在。
return 1;
}
}
}
/// <summary>
/// 聊天消息条件判断
/// </summary>
/// <param name="chatUnit"></param>
/// <param name="tree"></param>
/// <param name="isCheckSendTime"></param>
/// <returns></returns>
private static uint Condition(ChatUnit chatUnit, ChatInfoTree tree, bool isCheckSendTime = true)
{
// 每个频道可能聊天的间隔都不一样。
// 这里的条件判断,是根据频道的类型,来判断是否到达了聊天的间隔。
var now = TimeHelper.Now;
if (isCheckSendTime)
{
// 这里的间隔时间,是根据频道的类型,来获取的。
chatUnit.SendTime.TryGetValue(tree.ChatChannelType, out var sendTime);
// 判定聊天间隔是否到达
// 其实的话这个ChatCD应该是根据频道的类型来获取的。
// 一般的话都是做一个配置表,通过配置表来获取不同频道的时间间隔。
if (now - sendTime < ChatCD)
{
// 这个1代表当前频道聊天的间隔过短
return 1;
}
}
// 判定聊天内容是否超长
var itemCount = 0;
var chatTextSize = 0;
foreach (var chatInfoNode in tree.Node)
{
switch ((ChatNodeType)chatInfoNode.ChatNodeType)
{
case ChatNodeType.Text:
{
chatTextSize += chatInfoNode.Content.Length;
break;
}
case ChatNodeType.Image:
{
// 规定图片占聊天消息的5个字符长度
chatTextSize += 5;
break;
}
case ChatNodeType.OpenUI:
{
// 规定OpenUI占聊天消息的10个字符长度
chatTextSize += 10;
break;
}
case ChatNodeType.Item:
{
itemCount++;
break;
}
}
}
if (chatTextSize > MaxTextLength)
{
// 这个2代表当前频道聊天内容超长
return 2;
}
if (itemCount > MaxShowItemCount)
{
// 这个3代表当前频道聊天里道具数量过多
return 3;
}
if (isCheckSendTime)
{
// 更新当前频道的发送时间
chatUnit.SendTime[tree.ChatChannelType] = now;
}
return 0;
}
#region
/// <summary>
/// 广播消息
/// </summary>
/// <param name="scene"></param>
/// <param name="tree"></param>
private static void Broadcast(Scene scene, ChatInfoTree tree)
{
var networkMessagingComponent = scene.NetworkMessagingComponent;
var chatMessage = new Chat2G_ChatMessage()
{
ChatInfoTree = tree
};
if (tree.Target.Count > 0)
{
var chatUnitManageComponent = scene.GetComponent<ChatUnitManageComponent>();
// 给一部分人广播消息
foreach (var chatUnitId in tree.Target)
{
if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit))
{
continue;
}
networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage);
}
return;
}
// 发送给所有Gate服务器让Gate服务器转发给其他客户端
var gateConfigs = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Gate);
foreach (var gateSceneConfig in gateConfigs)
{
// 这里是要发送一个消息给Gate服务器Gate服务器再转发给其他客户端
networkMessagingComponent.SendInnerRoute(gateSceneConfig.RouteId, chatMessage);
}
}
/// <summary>
/// 发送频道消息
/// </summary>
/// <param name="chatUnit"></param>
/// <param name="tree"></param>
private static uint Channel(ChatUnit chatUnit, ChatInfoTree tree)
{
// 那组队,公会、地图、等这个的聊天,如何使用频道呢?
// 这里的频道,是指一个频道,比如一个公会的频道,一个队伍的频道,一个地图的频道。
// 1、一般组队工会、地图等都是有一个创建的一个逻辑咱们个在这个创建的逻辑中根据队伍、公会、地图的ID
// 把这些ID当做频道ID,然后发送到Chat服务器先申请一个频道把这个频道ID返回给创建公会队伍的逻辑。
// 这时候队伍公会、发送聊天消息的时候就会根据这个ID来进行发送。
// 2、地图同样道理创建地图的时候也会有一个创建的逻辑这个逻辑会返回一个地图的ID这个ID就是地图的频道ID。
// 3、这这些ID根据频道类型发送给客户端客户端发送的时候根据频道不同拿不同的ID来发送。
// 课外:
// 客户端创建一个频道、拿到这个频道号告诉其他人其他人通过这个频道ID加入到这个频道。
// 客户端创建一个频道,邀请其他人加入到这个频道,其他人可能客户端会接收一个协议,就是邀请你加入到这个频道,如果同意,
// 你就加入到这个频道(你点同意后,会发送一个消息给聊天服务器,聊天服务器会把你加入到这个频道)。
if (!chatUnit.Channels.TryGetValue(tree.ChatChannelId, out var channel))
{
// 这个1代表当前频道不存在。
return 1;
}
channel.Send(tree);
return 0;
}
/// <summary>
/// 发送私聊消息
/// </summary>
/// <param name="chatUnit"></param>
/// <param name="tree"></param>
/// <returns></returns>
private static uint Private(ChatUnit chatUnit, ChatInfoTree tree)
{
// 私聊,就是两个玩家之间,直接聊天。
// 1、首先客户端需要知道对方的ID这个ID是通过什么方式获取的呢
// 2、客户端需要发送一个私聊消息给聊天服务器聊天服务器需要把这个消息转发给对方。
// 3、对方收到消息后需要显示出来。
// 4、聊天服务器需要记录这个私聊消息并把这个消息转发给两个玩家。
// 5、两个玩家收到消息后需要显示出来。
if (tree.Target == null || tree.Target.Count <= 0)
{
// 这个1代表对方ID不的合法的。
return 1;
}
var targetChatUnitId = tree.Target[0];
var scene = chatUnit.Scene;
if (!scene.GetComponent<ChatUnitManageComponent>().TryGet(targetChatUnitId, out var targetChatUnit))
{
// 这个2代表对方不在线。
return 2;
}
var networkMessagingComponent = scene.NetworkMessagingComponent;
var chatMessage = new Chat2C_Message()
{
ChatInfoTree = tree
};
// 先给自己发送一个聊天消息。
networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage);
// 然后再给对方发送一个聊天消息。
networkMessagingComponent.SendInnerRoute(targetChatUnit.GateRouteId, chatMessage);
return 0;
}
#endregion
}

View File

@@ -0,0 +1,119 @@
namespace Fantasy;
/// <summary>
/// 创建聊天树的总入口
/// </summary>
public static class ChatTreeFactory
{
/// <summary>
/// 创建世界聊天树
/// </summary>
/// <param name="scene"></param>
/// <returns></returns>
public static ChatInfoTree World(Scene scene)
{
return new ChatInfoTree()
{
Scene = scene,
ChatChannelType = (int)ChatChannelType.World,
};
}
/// <summary>
/// 创建私聊聊天树
/// </summary>
/// <param name="scene"></param>
/// <returns></returns>
public static ChatInfoTree Private(Scene scene)
{
return new ChatInfoTree()
{
Scene = scene,
ChatChannelType = (int)ChatChannelType.Private,
};
}
/// <summary>
/// 创建系统聊天树
/// </summary>
/// <param name="scene"></param>
/// <returns></returns>
public static ChatInfoTree System(Scene scene)
{
return new ChatInfoTree()
{
Scene = scene,
ChatChannelType = (int)ChatChannelType.System,
};
}
/// <summary>
/// 创建公广播聊天树
/// </summary>
/// <param name="scene"></param>
/// <returns></returns>
public static ChatInfoTree Broadcast(Scene scene)
{
return new ChatInfoTree()
{
Scene = scene,
ChatChannelType = (int)ChatChannelType.Broadcast,
};
}
/// <summary>
/// 创建公告聊天树
/// </summary>
/// <param name="scene"></param>
/// <returns></returns>
public static ChatInfoTree Notice(Scene scene)
{
return new ChatInfoTree()
{
Scene = scene,
ChatChannelType = (int)ChatChannelType.Notice,
};
}
/// <summary>
/// 创建队伍聊天树
/// </summary>
/// <param name="scene"></param>
/// <returns></returns>
public static ChatInfoTree Team(Scene scene)
{
return new ChatInfoTree()
{
Scene = scene,
ChatChannelType = (int)ChatChannelType.Team,
};
}
/// <summary>
/// 创建附近人聊天树
/// </summary>
/// <param name="scene"></param>
/// <returns></returns>
public static ChatInfoTree Near(Scene scene)
{
return new ChatInfoTree()
{
Scene = scene,
ChatChannelType = (int)ChatChannelType.Near,
};
}
/// <summary>
/// 创建当前地图聊天树
/// </summary>
/// <param name="scene"></param>
/// <returns></returns>
public static ChatInfoTree CurrentMap(Scene scene)
{
return new ChatInfoTree()
{
Scene = scene,
ChatChannelType = (int)ChatChannelType.CurrentMap,
};
}
}

View File

@@ -0,0 +1,49 @@
using Fantasy.Entitas;
using Fantasy.Entitas.Interface;
#pragma warning disable CS8602 // Dereference of a possibly null reference.
#pragma warning disable CS8601 // Possible null reference assignment.
namespace Fantasy;
public sealed class ChatChannelCenterComponentDestroySystem : DestroySystem<ChatChannelCenterComponent>
{
protected override void Destroy(ChatChannelCenterComponent self)
{
foreach (var chatChannelComponent in self.Channels.Values.ToArray())
{
chatChannelComponent.Dispose();
}
self.Channels.Clear();
}
}
public static class ChatChannelCenterComponentSystem
{
public static ChatChannelComponent Apply(this ChatChannelCenterComponent self, long channelId)
{
if (self.Channels.TryGetValue(channelId, out var channel))
{
return channel;
}
channel = Entity.Create<ChatChannelComponent>(self.Scene, channelId, true, true);
self.Channels.Add(channelId, channel);
return channel;
}
public static bool TryGet(this ChatChannelCenterComponent self, long channelId, out ChatChannelComponent channel)
{
return self.Channels.TryGetValue(channelId, out channel);
}
public static void Disband(this ChatChannelCenterComponent self, long channelId)
{
if (self.Channels.Remove(channelId, out var channel))
{
return;
}
channel.Dispose();
}
}

View File

@@ -0,0 +1,86 @@
using Fantasy.Entitas;
namespace Fantasy;
public class MemoryEntity : Entity
{
}
public static class ChatChannelComponentSystem
{
public static void Send(this ChatChannelComponent self, ChatInfoTree tree)
{
var chatUnitManageComponent = self.Scene.GetComponent<ChatUnitManageComponent>();
var networkMessagingComponent = self.Scene.NetworkMessagingComponent;
var chatMessage = new Chat2C_Message()
{
ChatInfoTree = tree
};
foreach (var unitId in self.Units)
{
if (!chatUnitManageComponent.Units.TryGetValue(unitId, out var chatUnit))
{
continue;
}
networkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, chatMessage);
}
}
public static bool JoinChannel(this ChatChannelComponent self, long chatUnitId)
{
var chatUnitManageComponent = self.Scene.GetComponent<ChatUnitManageComponent>();
if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit))
{
return false;
}
// 将当前频道中加入该用户。
self.Units.Add(chatUnitId);
// 给用户添加频道。
if (!chatUnit.Channels.ContainsKey(self.Id))
{
chatUnit.Channels.Add(self.Id, self);
}
// 可以在这里给客户端发送一个加入频道成功的消息。
return true;
}
public static bool IsJoinedChannel(this ChatChannelComponent self, long chatUnitId)
{
return self.Units.Contains(chatUnitId);
}
public static void ExitChannel(this ChatChannelComponent self, long chatUnitId, bool isRemoveUnitChannel = true)
{
if (!self.Units.Contains(chatUnitId))
{
return;
}
var chatUnitManageComponent = self.Scene.GetComponent<ChatUnitManageComponent>();
if (!chatUnitManageComponent.TryGet(chatUnitId, out var chatUnit))
{
return;
}
if (isRemoveUnitChannel)
{
// 给用户移除频道。
chatUnit.Channels.Remove(self.Id);
}
// 在当前频道中移除该用户。
self.Units.Remove(chatUnitId);
// 如果当前频道中没有用户了,则销毁该频道。
if (self.Units.Count == 0)
{
self.Dispose();
}
}
}

View File

@@ -0,0 +1,67 @@
using Fantasy.Entitas;
using Fantasy.Entitas.Interface;
#pragma warning disable CS8601 // Possible null reference assignment.
namespace Fantasy;
public sealed class ChatUnitManageComponentDestroySystem : DestroySystem<ChatUnitManageComponent>
{
protected override void Destroy(ChatUnitManageComponent self)
{
foreach (var chatUnit in self.Units.Values.ToArray())
{
chatUnit.Dispose();
}
self.Units.Clear();
}
}
public static class ChatUnitManageComponentSystem
{
public static ChatUnit Add(this ChatUnitManageComponent self, long unitId, string userName, long gateRouteId)
{
if (!self.Units.TryGetValue(unitId, out var chatUnit))
{
chatUnit = Entity.Create<ChatUnit>(self.Scene, unitId, true, true);
self.Units.Add(unitId, chatUnit);
Log.Debug($"Add ChatUnit Count: {self.Units.Count} UnitId: {unitId} UserName: {userName} GateRouteId: {gateRouteId}");
}
else
{
Log.Debug($"ChatUnit: {chatUnit.UserName}({chatUnit.GateRouteId})");
}
chatUnit.UserName = userName;
chatUnit.GateRouteId = gateRouteId;
return chatUnit;
}
public static ChatUnit? Get(this ChatUnitManageComponent self, long unitId)
{
return self.Units.GetValueOrDefault(unitId);
}
public static bool TryGet(this ChatUnitManageComponent self, long unitId, out ChatUnit chatUnit)
{
return self.Units.TryGetValue(unitId, out chatUnit);
}
public static void Remove(this ChatUnitManageComponent self, long unitId, bool isDispose = true)
{
// 由于退出频道的时候也会检查该玩家是否在ChatUnitManageComponent中所以这里不做移除操作。
if (!self.Units.TryGetValue(unitId, out var chatUnit))
{
return;
}
if (isDispose)
{
chatUnit.Dispose();
}
// 因为玩家已经执行了退出频道的操作了,所以要清除一下这个数据。
self.Units.Remove(unitId);
Log.Debug($"Remove ChatUnit: {chatUnit.UserName}({chatUnit.GateRouteId}) Count: {self.Units.Count}");
}
}

View File

@@ -0,0 +1,21 @@
using Fantasy.Entitas.Interface;
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
namespace Fantasy;
public sealed class ChatUnitDestroySystem : DestroySystem<ChatUnit>
{
protected override void Destroy(ChatUnit self)
{
self.UserName = null;
self.GateRouteId = 0;
// 退出当前ChatUnit拥有的所有频道
foreach (var (_,chatChannelComponent) in self.Channels)
{
chatChannelComponent.ExitChannel(self.Id, false);
}
// 理论情况下这个self.Channels不会存在因为数据的因为上面已经给清空掉了。
// 但是self.Channels.Clear();还是加上吧,防止以后忘记了。
self.Channels.Clear();
}
}

View File

@@ -0,0 +1,20 @@
using Fantasy.Async;
using Fantasy.Network.Interface;
namespace Fantasy;
public sealed class Chat2G_ChatMessageHandler : Route<Scene,Chat2G_ChatMessage>
{
protected override async FTask Run(Scene scene, Chat2G_ChatMessage message)
{
var chatMessage = new Chat2C_Message()
{
ChatInfoTree = message.ChatInfoTree
};
foreach (var session in scene.GetComponent<GateUnitManageComponent>().ForEachUnitSession())
{
session.Send(chatMessage);
}
await FTask.CompletedTask;
}
}

View File

@@ -0,0 +1,15 @@
using Fantasy.Async;
using Fantasy.Network;
using Fantasy.Network.Interface;
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
namespace Fantasy;
public sealed class C2G_ExitRequestHandler : MessageRPC<C2G_ExitRequest, G2C_ExitResponse>
{
protected override async FTask Run(Session session, C2G_ExitRequest request, G2C_ExitResponse response, Action reply)
{
session.RemoveComponent<GateUnitFlagComponent>();
await FTask.CompletedTask;
}
}

View File

@@ -0,0 +1,30 @@
using Fantasy.Async;
using Fantasy.Network;
using Fantasy.Network.Interface;
namespace Fantasy;
public sealed class C2G_LoginRequestHandler : MessageRPC<C2G_LoginRequest, G2C_LoginResponse>
{
protected override async FTask Run(Session session, C2G_LoginRequest request, G2C_LoginResponse response, Action reply)
{
if (string.IsNullOrEmpty(request.UserName))
{
// 这里返回的1代表账号信息是空的。
response.ErrorCode = 1;
return;
}
var scene = session.Scene;
// 添加一个GateUnitFlagComponent组件用来Session断开、或者传递数据时使用。
var gateUnitFlagComponent = session.GetOrAddComponent<GateUnitFlagComponent>();
// 上线到Gate
var gateUnit = GateUnitHelper.Online(scene, request.UserName, session);
// 设置GateUnitFlagComponent的GateUnitId
gateUnitFlagComponent.GateUnitId = gateUnit.Id;
// 登录到其他服务器
await GateLoginHelper.Online(session, gateUnit, session.RunTimeId);
Log.Debug($"gateUnit : {gateUnit.UserName}");
await FTask.CompletedTask;
}
}

View File

@@ -0,0 +1,117 @@
using Fantasy.Async;
using Fantasy.Network;
using Fantasy.Platform.Net;
namespace Fantasy;
public static class GateLoginHelper
{
private static readonly List<Func<Scene, GateUnit, long, FTask<(uint, long, int)>>> Scenes =
new List<Func<Scene, GateUnit, long, FTask<(uint, long, int)>>>()
{
// 聊天服务器上线
{ OnlineChat },
// 游戏服务器上线
{ OnlineGame }
};
/// <summary>
/// 上线到其他服务器
/// </summary>
/// <param name="session"></param>
/// <param name="gateUnit"></param>
/// <param name="gateRouteId"></param>
public static async FTask<uint> Online(Session session, GateUnit gateUnit, long gateRouteId)
{
var scene = session.Scene;
// 要实现自动Route转发协议必须要给Session添加一个RouteComponent然后通过它来转发消息。
var routeComponent = session.GetOrAddComponent<RouteComponent>();
// 这里是登录的总入口,在这里会陆续的登录其他服务器,如:聊天服务器、游戏服务器等
foreach (var sceneHandler in Scenes)
{
var (errorCode, routeId, routeType) = await sceneHandler(scene, gateUnit, gateRouteId);
if (errorCode != 0)
{
return errorCode;
}
// 保存上线过的RouteId用于下线时通知其他服务器下线
gateUnit.Routes[routeType] = routeId;
// 添加到路由地址中只有添加了这个路由映射地址才会自动的从Gate转发到Chat
routeComponent.AddAddress(routeType, routeId);
}
return 0;
}
/// <summary>
/// 通知其他服务器下线
/// </summary>
/// <param name="gateUnit"></param>
public static async FTask<uint> Offline(GateUnit gateUnit)
{
var networkMessagingComponent = gateUnit.Scene.NetworkMessagingComponent;
foreach (var (routeType, routeId) in gateUnit.Routes)
{
switch (routeType)
{
case RouteType.ChatRoute:
{
var response =
(Chat2G_OfflineResponse)await networkMessagingComponent.CallInnerRoute(routeId,
new G2Chat_OfflineRequest());
if (response.ErrorCode != 0)
{
return response.ErrorCode;
}
continue;
}
}
}
gateUnit.Routes.Clear();
return 0;
}
/// <summary>
/// 聊天服务器上线
/// </summary>
/// <param name="scene"></param>
/// <param name="gateUnit"></param>
/// <param name="gateRouteId"></param>
/// <returns></returns>
private static async FTask<(uint errorCode, long routeId, int routeType)> OnlineChat(Scene scene, GateUnit gateUnit, long gateRouteId)
{
// 登录聊天服务器
var chatConfig = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Chat)[0];
// 咱们框架中如果要Scene和Scene之间通讯必须要用到NetworkMessagingComponent通过它来发送没有其他办法。
var response = (Chat2G_LoginResponse)await scene.NetworkMessagingComponent.CallInnerRoute(chatConfig.RouteId,
new G2Chat_LoginRequest()
{
UserName = gateUnit.UserName,
UnitId = gateUnit.Id,
GateRouteId = gateRouteId
});
return (response.ErrorCode, response.ChatRouteId, RouteType.ChatRoute);
}
/// <summary>
/// 游戏服务器上线
/// </summary>
/// <param name="scene"></param>
/// <param name="gateUnit"></param>
/// <param name="gateRouteId"></param>
/// <returns></returns>
private static async FTask<(uint errorCode, long routeId, int routeType)> OnlineGame(Scene scene, GateUnit gateUnit, long gateRouteId)
{
// 登录聊天服务器
var mapConfig = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Map)[0];
var response = (M2G_LoginResponse)await scene.NetworkMessagingComponent.CallInnerRoute(mapConfig.RouteId,
new G2M_LoginRequest()
{
ChatUnitRouteId = gateUnit.Routes[RouteType.ChatRoute]
});
return (response.ErrorCode, response.MapRouteId, RouteType.GateRoute);
}
}

View File

@@ -0,0 +1,105 @@
using Fantasy.Async;
using Fantasy.Network;
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
#pragma warning disable CS8602 // Dereference of a possibly null reference.
namespace Fantasy;
public static class GateUnitHelper
{
/// <summary>
/// GateUnit上线
/// </summary>
/// <param name="scene"></param>
/// <param name="userName"></param>
/// <param name="session"></param>
/// <returns></returns>
public static GateUnit Online(Scene scene, string userName, Session session)
{
// 增加一个GateUnit到缓存中、如果缓存中已经存在直接返回缓存中的实体数据
return scene.GetComponent<GateUnitManageComponent>().Add(userName, session);
}
/// <summary>
/// GateUnit下线
/// </summary>
/// <param name="scene"></param>
/// <param name="gateUnitId"></param>
public static void Offline(Scene scene, long gateUnitId)
{
if (!scene.GetComponent<GateUnitManageComponent>().TryGet(gateUnitId, out var gateUnit))
{
return;
}
gateUnit.GetOrAddComponent<EntityTimeoutComponent>().SetTimeout(5000);
}
/// <summary>
/// 缓存中获取一个GateUnit
/// </summary>
/// <param name="scene"></param>
/// <param name="userName"></param>
/// <returns></returns>
public static GateUnit? Get(Scene scene, string userName)
{
return scene.GetComponent<GateUnitManageComponent>().Get(userName);
}
/// <summary>
/// 缓存中获取一个GateUnit
/// </summary>
/// <param name="scene"></param>
/// <param name="gateUnitId"></param>
/// <returns></returns>
public static GateUnit? Get(Scene scene, long gateUnitId)
{
return scene.GetComponent<GateUnitManageComponent>().Get(gateUnitId);
}
/// <summary>
/// 尝试获取一个GateUnit
/// </summary>
/// <param name="scene"></param>
/// <param name="userName"></param>
/// <param name="gateUnit"></param>
/// <returns></returns>
public static bool TryGet(Scene scene, string userName, out GateUnit? gateUnit)
{
return scene.GetComponent<GateUnitManageComponent>().TryGet(userName, out gateUnit);
}
/// <summary>
/// 尝试获取一个GateUnit
/// </summary>
/// <param name="scene"></param>
/// <param name="gateUnitId"></param>
/// <param name="gateUnit"></param>
/// <returns></returns>
public static bool TryGet(Scene scene, long gateUnitId, out GateUnit? gateUnit)
{
return scene.GetComponent<GateUnitManageComponent>().TryGet(gateUnitId, out gateUnit);
}
/// <summary>
/// 在缓存中移除一个GateUnit
/// </summary>
/// <param name="scene"></param>
/// <param name="userName"></param>
/// <param name="isDispose"></param>
public static FTask Remove(Scene scene, string userName, bool isDispose = true)
{
return scene.GetComponent<GateUnitManageComponent>().Remove(userName, isDispose);
}
/// <summary>
/// 在缓存中移除一个GateUnit
/// </summary>
/// <param name="scene"></param>
/// <param name="gateUnitId"></param>
/// <param name="isDispose"></param>
public static FTask Remove(Scene scene, long gateUnitId, bool isDispose = true)
{
return scene.GetComponent<GateUnitManageComponent>().Remove(gateUnitId, isDispose);
}
}

View File

@@ -0,0 +1,15 @@
using Fantasy.Entitas.Interface;
namespace Fantasy;
public sealed class GateUnitFlagComponentDestroySystem : DestroySystem<GateUnitFlagComponent>
{
protected override void Destroy(GateUnitFlagComponent self)
{
var selfGateUnitId = self.GateUnitId;
// 执行下线操作
GateUnitHelper.Offline(self.Scene, selfGateUnitId);
// 清理垃圾数据
self.GateUnitId = 0;
}
}

View File

@@ -0,0 +1,135 @@
using Fantasy.Async;
using Fantasy.Entitas;
using Fantasy.Entitas.Interface;
using Fantasy.Network;
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
namespace Fantasy;
public sealed class GateUnitManageComponentDestroySystem : DestroySystem<GateUnitManageComponent>
{
protected override void Destroy(GateUnitManageComponent self)
{
foreach (var gateUnit in self.Units.Values.ToArray())
{
gateUnit.Dispose();
}
self.Units.Clear();
self.UnitsByUserName.Clear();
}
}
public static class GateUnitManageComponentSystem
{
public static GateUnit Add(this GateUnitManageComponent self, string userName, Session session)
{
if (self.UnitsByUserName.TryGetValue(userName, out var gateUnit))
{
gateUnit.Session = session;
// 如果缓存中已经存在了该名字,那就直接从缓存中返回就可以了
Log.Debug($"在缓存中获取的数据 userName:{userName}");
return gateUnit;
}
// 创建一个新的实体
gateUnit = Entity.Create<GateUnit>(self.Scene, true, true);
gateUnit.UserName = userName;
gateUnit.Session = session;
// 添加到缓存中
self.Units.Add(gateUnit.Id, gateUnit);
self.UnitsByUserName.Add(userName, gateUnit);
Log.Debug($"新创建的数据 userName:{userName}");
return gateUnit;
}
public static GateUnit? Get(this GateUnitManageComponent self, string userName)
{
return self.UnitsByUserName.GetValueOrDefault(userName);
}
public static GateUnit? Get(this GateUnitManageComponent self, long gateUnitId)
{
return self.Units.GetValueOrDefault(gateUnitId);
}
public static bool TryGet(this GateUnitManageComponent self, string userName, out GateUnit? gateUnit)
{
return self.UnitsByUserName.TryGetValue(userName, out gateUnit);
}
public static bool TryGet(this GateUnitManageComponent self, long gateUnitId, out GateUnit? gateUnit)
{
return self.Units.TryGetValue(gateUnitId, out gateUnit);
}
public static async FTask Remove(this GateUnitManageComponent self, string userName, bool isDispose = true)
{
if (!self.UnitsByUserName.TryGetValue(userName, out var gateUnit))
{
return;
}
// 通知其他服务器下线
var result = await GateLoginHelper.Offline(gateUnit);
if (result != 0)
{
Log.Error($"通知其他服务器下线失败,错误码:{result}");
return;
}
// 如果其他服务器都已经下线了,那就直接移除本地数据
self.Units.Remove(gateUnit.Id);
self.UnitsByUserName.Remove(userName);
if (isDispose)
{
gateUnit.Dispose();
}
gateUnit.Session = null;
gateUnit.UserName = null;
}
public static async FTask Remove(this GateUnitManageComponent self, long gateUnitId, bool isDispose = true)
{
if (!self.Units.TryGetValue(gateUnitId, out var gateUnit))
{
return;
}
// 通知其他服务器下线
var result = await GateLoginHelper.Offline(gateUnit);
if (result != 0)
{
Log.Error($"通知其他服务器下线失败,错误码:{result}");
return;
}
// 如果其他服务器都已经下线了,那就直接移除本地数据
self.Units.Remove(gateUnitId);
self.UnitsByUserName.Remove(gateUnit.UserName);
if (isDispose)
{
gateUnit.Dispose();
}
gateUnit.Session = null;
gateUnit.UserName = null;
}
public static IEnumerable<Session> ForEachUnitSession(this GateUnitManageComponent self)
{
foreach (var (_, gateUnit) in self.Units)
{
Session gateUnitSession = gateUnit.Session;
if (gateUnitSession == null)
{
continue;
}
yield return gateUnitSession;
}
}
}

View File

@@ -0,0 +1,14 @@
using Fantasy.Entitas.Interface;
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
namespace Fantasy;
public sealed class GateUnitDestroySystem : DestroySystem<GateUnit>
{
protected override void Destroy(GateUnit self)
{
// 移除缓存中的GateUnit
// 这里的销毁只能是通过EntityTimeoutComponent超时来触发的销毁不能通过直接调用Dispose来触发的销毁
GateUnitHelper.Remove(self.Scene, self.Id, false).Coroutine();
}
}

View File

@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Entity\Entity.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,17 @@
using Fantasy.Async;
using Fantasy.Network.Interface;
namespace Fantasy.Map;
public class G2M_LoginRequestHandler : RouteRPC<Scene,G2M_LoginRequest, M2G_LoginResponse>
{
protected override async FTask Run(Scene scene, G2M_LoginRequest request, M2G_LoginResponse response, Action reply)
{
var chatInfoTree = ChatTreeFactory.Broadcast(scene).AddendTextNode("您杀死了奥格瑞玛!");
scene.TimerComponent.Net.RepeatedTimer(2000, () =>
{
ChatHelper.SendChatMessage(scene, request.ChatUnitRouteId, chatInfoTree);
});
await FTask.CompletedTask;
}
}

View File

@@ -0,0 +1,32 @@
using Fantasy.Async;
using Fantasy.Event;
namespace Fantasy;
public sealed class OnSceneCreate_Init : AsyncEventSystem<OnCreateScene>
{
protected override async FTask Handler(OnCreateScene self)
{
var scene = self.Scene;
switch (scene.SceneType)
{
case SceneType.Gate:
{
// GateUnit管理组件。
scene.AddComponent<GateUnitManageComponent>();
break;
}
case SceneType.Chat:
{
// 序列化组件。
scene.AddComponent<SerializerComponent>().Initialize();
// ChatUnit管理组件。
scene.AddComponent<ChatUnitManageComponent>();
// 聊天频道中控中心组件。
scene.AddComponent<ChatChannelCenterComponent>();
break;
}
}
}
}

View File

@@ -0,0 +1,50 @@
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
using Fantasy.Entitas.Interface;
namespace Fantasy;
public sealed class EntityTimeoutComponentDestroySystem : DestroySystem<EntityTimeoutComponent>
{
protected override void Destroy(EntityTimeoutComponent self)
{
self.CancelTimeout();
}
}
public static class EntityTimeoutComponentSystem
{
// 这个组件会挂载到目标组件上
// 当这个组件的超时时间到了,会自动销毁这个组件的父亲
public static void SetTimeout(this EntityTimeoutComponent self, int time)
{
var selfParent = self.Parent;
if (selfParent == null)
{
Log.Error("EntityTimeoutComponent's parent is null.");
return;
}
var selfParentRunTimeId = selfParent.RunTimeId;
self.TimerId = self.Scene.TimerComponent.Net.OnceTimer(time, () =>
{
if (selfParent.RunTimeId != selfParentRunTimeId)
{
return;
}
self.TimerId = 0;
selfParent.Dispose();
});
}
public static void CancelTimeout(this EntityTimeoutComponent self)
{
if (self.TimerId == 0)
{
return;
}
self.Scene.TimerComponent.Net.Remove(ref self.TimerId);
}
}

View File

@@ -0,0 +1,24 @@
using Fantasy.Serialize;
#pragma warning disable CS8604 // Possible null reference argument.
namespace Fantasy;
public static class SerializerComponentSystem
{
public static void Initialize(this SerializerComponent self)
{
self.Serialize = SerializerManager.GetSerializer(FantasySerializerType.ProtoBuf);
}
public static byte[] Serialize<T>(this SerializerComponent self, T @object)
{
using var memoryStreamBuffer = self.BufferPool.RentMemoryStream(MemoryStreamBufferSource.None);
self.Serialize.Serialize(typeof(T), @object, memoryStreamBuffer);
return memoryStreamBuffer.ToArray();
}
public static T Deserialize<T>(this SerializerComponent self, byte[] bytes)
{
return self.Serialize.Deserialize<T>(bytes);
}
}

View File

@@ -0,0 +1,324 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"Hotfix/1.0.0": {
"dependencies": {
"Entity": "1.0.0"
},
"runtime": {
"Hotfix.dll": {}
}
},
"CommandLineParser/2.9.1": {
"runtime": {
"lib/netstandard2.0/CommandLine.dll": {
"assemblyVersion": "2.9.1.0",
"fileVersion": "2.9.1.0"
}
}
},
"DnsClient/1.6.1": {
"dependencies": {
"Microsoft.Win32.Registry": "5.0.0"
},
"runtime": {
"lib/net5.0/DnsClient.dll": {
"assemblyVersion": "1.6.1.0",
"fileVersion": "1.6.1.0"
}
}
},
"Fantasy-Net/2024.1.17": {
"dependencies": {
"CommandLineParser": "2.9.1",
"MongoDB.Bson": "3.0.0",
"MongoDB.Driver": "3.0.0",
"Newtonsoft.Json": "13.0.3",
"System.IO.Pipelines": "8.0.0",
"protobuf-net": "3.2.45"
},
"runtime": {
"lib/net8.0/Fantasy-Net.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {},
"Microsoft.NETCore.Platforms/5.0.0": {},
"Microsoft.Win32.Registry/5.0.0": {
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"MongoDB.Bson/3.0.0": {
"dependencies": {
"System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"runtime": {
"lib/net6.0/MongoDB.Bson.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"MongoDB.Driver/3.0.0": {
"dependencies": {
"DnsClient": "1.6.1",
"Microsoft.Extensions.Logging.Abstractions": "2.0.0",
"MongoDB.Bson": "3.0.0",
"SharpCompress": "0.30.1",
"Snappier": "1.0.0",
"System.Buffers": "4.5.1",
"ZstdSharp.Port": "0.7.3"
},
"runtime": {
"lib/net6.0/MongoDB.Driver.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.0.0.0"
}
}
},
"Newtonsoft.Json/13.0.3": {
"runtime": {
"lib/net6.0/Newtonsoft.Json.dll": {
"assemblyVersion": "13.0.0.0",
"fileVersion": "13.0.3.27908"
}
}
},
"protobuf-net/3.2.45": {
"dependencies": {
"protobuf-net.Core": "3.2.45"
},
"runtime": {
"lib/net6.0/protobuf-net.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.2.45.36865"
}
}
},
"protobuf-net.Core/3.2.45": {
"dependencies": {
"System.Collections.Immutable": "7.0.0"
},
"runtime": {
"lib/net6.0/protobuf-net.Core.dll": {
"assemblyVersion": "3.0.0.0",
"fileVersion": "3.2.45.36865"
}
}
},
"SharpCompress/0.30.1": {
"runtime": {
"lib/net5.0/SharpCompress.dll": {
"assemblyVersion": "0.30.1.0",
"fileVersion": "0.30.1.0"
}
}
},
"Snappier/1.0.0": {
"runtime": {
"lib/net5.0/Snappier.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Buffers/4.5.1": {},
"System.Collections.Immutable/7.0.0": {},
"System.IO.Pipelines/8.0.0": {},
"System.Memory/4.5.5": {},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {},
"System.Security.AccessControl/5.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"System.Security.Principal.Windows/5.0.0": {},
"ZstdSharp.Port/0.7.3": {
"runtime": {
"lib/net7.0/ZstdSharp.dll": {
"assemblyVersion": "0.7.3.0",
"fileVersion": "0.7.3.0"
}
}
},
"Entity/1.0.0": {
"dependencies": {
"Fantasy-Net": "2024.1.17"
},
"runtime": {
"Entity.dll": {}
}
}
}
},
"libraries": {
"Hotfix/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"CommandLineParser/2.9.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==",
"path": "commandlineparser/2.9.1",
"hashPath": "commandlineparser.2.9.1.nupkg.sha512"
},
"DnsClient/1.6.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==",
"path": "dnsclient/1.6.1",
"hashPath": "dnsclient.1.6.1.nupkg.sha512"
},
"Fantasy-Net/2024.1.17": {
"type": "package",
"serviceable": true,
"sha512": "sha512-06mxvByfEvF/ELAiAjaea4aWI5IBbBDyH9sVdPxEOEEtpAbcguaiydUNi2CVBE+ppW+CYsznTXalN0Xk0vAMKQ==",
"path": "fantasy-net/2024.1.17",
"hashPath": "fantasy-net.2024.1.17.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6ZCllUYGFukkymSTx3Yr0G/ajRxoNJp7/FqSxSB4fGISST54ifBhgu4Nc0ItGi3i6DqwuNd8SUyObmiC++AO2Q==",
"path": "microsoft.extensions.logging.abstractions/2.0.0",
"hashPath": "microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
"path": "microsoft.netcore.platforms/5.0.0",
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"path": "microsoft.win32.registry/5.0.0",
"hashPath": "microsoft.win32.registry.5.0.0.nupkg.sha512"
},
"MongoDB.Bson/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-qnPRJ58HXDh7C4oxTf6YB7BJhlCGJIa6TMXhzImw6zk44lrAomQXTB6AtoQ5lNJbkyrgQcT7+smsKFMnXmLXhw==",
"path": "mongodb.bson/3.0.0",
"hashPath": "mongodb.bson.3.0.0.nupkg.sha512"
},
"MongoDB.Driver/3.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-udcP8rOhyuhLDn3sGVdNUgQSXfKGPaIP4w09XVKf4xdy66YSXinhkIuQSuOeZVHdTFsG2PpUbRx2wyFm7E0EMg==",
"path": "mongodb.driver/3.0.0",
"hashPath": "mongodb.driver.3.0.0.nupkg.sha512"
},
"Newtonsoft.Json/13.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
"path": "newtonsoft.json/13.0.3",
"hashPath": "newtonsoft.json.13.0.3.nupkg.sha512"
},
"protobuf-net/3.2.45": {
"type": "package",
"serviceable": true,
"sha512": "sha512-5UZ/ukUHcGbFSl7vNMrHsfjqdxusdd9w7w0fCEXzf3UUtsrGNVCzV5SmF+sCHAbnRV2qPcD1ixiDP7Aj8lX/HA==",
"path": "protobuf-net/3.2.45",
"hashPath": "protobuf-net.3.2.45.nupkg.sha512"
},
"protobuf-net.Core/3.2.45": {
"type": "package",
"serviceable": true,
"sha512": "sha512-PMWatW2NrT1uTXD7etJ4VdQ0wWZLFrIfdRGppD2QX7nzZ0+kIzqhq551u6ZiXJHWJgG4hWFEkSnUnt2aB6posg==",
"path": "protobuf-net.core/3.2.45",
"hashPath": "protobuf-net.core.3.2.45.nupkg.sha512"
},
"SharpCompress/0.30.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==",
"path": "sharpcompress/0.30.1",
"hashPath": "sharpcompress.0.30.1.nupkg.sha512"
},
"Snappier/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==",
"path": "snappier/1.0.0",
"hashPath": "snappier.1.0.0.nupkg.sha512"
},
"System.Buffers/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"path": "system.buffers/4.5.1",
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
},
"System.Collections.Immutable/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==",
"path": "system.collections.immutable/7.0.0",
"hashPath": "system.collections.immutable.7.0.0.nupkg.sha512"
},
"System.IO.Pipelines/8.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
"path": "system.io.pipelines/8.0.0",
"hashPath": "system.io.pipelines.8.0.0.nupkg.sha512"
},
"System.Memory/4.5.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"path": "system.memory/4.5.5",
"hashPath": "system.memory.4.5.5.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
"path": "system.runtime.compilerservices.unsafe/5.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512"
},
"System.Security.AccessControl/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"path": "system.security.accesscontrol/5.0.0",
"hashPath": "system.security.accesscontrol.5.0.0.nupkg.sha512"
},
"System.Security.Principal.Windows/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==",
"path": "system.security.principal.windows/5.0.0",
"hashPath": "system.security.principal.windows.5.0.0.nupkg.sha512"
},
"ZstdSharp.Port/0.7.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-U9Ix4l4cl58Kzz1rJzj5hoVTjmbx1qGMwzAcbv1j/d3NzrFaESIurQyg+ow4mivCgkE3S413y+U9k4WdnEIkRA==",
"path": "zstdsharp.port/0.7.3",
"hashPath": "zstdsharp.port.0.7.3.nupkg.sha512"
},
"Entity/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Hotfix")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Hotfix")]
[assembly: System.Reflection.AssemblyTitleAttribute("Hotfix")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// 由 MSBuild WriteCodeFragment 类生成。

View File

@@ -0,0 +1 @@
28c7ffb99846e407a4d90a66ddc760b2a3412294f39e5810dd7ee1d10f0462a6

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net8.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Hotfix
build_property.ProjectDir = /Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 8.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@@ -0,0 +1 @@
db031dae618f2e362a528e6b2e15efd97c27daebca134f658fc2c17b89aba129

View File

@@ -0,0 +1,15 @@
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/bin/Debug/net8.0/Hotfix.deps.json
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/bin/Debug/net8.0/Hotfix.dll
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/bin/Debug/net8.0/Hotfix.pdb
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/bin/Debug/net8.0/Entity.dll
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/bin/Debug/net8.0/Entity.pdb
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/Hotfix.csproj.AssemblyReference.cache
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/Hotfix.GeneratedMSBuildEditorConfig.editorconfig
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/Hotfix.AssemblyInfoInputs.cache
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/Hotfix.AssemblyInfo.cs
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/Hotfix.csproj.CoreCompileInputs.cache
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/Hotfix.csproj.CopyComplete
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/Hotfix.dll
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/refint/Hotfix.dll
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/Hotfix.pdb
/Users/sining/Code/ServerLessions/Chat/Server/Hotfix/obj/Debug/net8.0/ref/Hotfix.dll

View File

@@ -0,0 +1,136 @@
{
"format": 1,
"restore": {
"/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj": {}
},
"projects": {
"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj",
"projectName": "Entity",
"projectPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj",
"packagesPath": "/Users/fantasy/.nuget/packages/",
"outputPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/obj/",
"projectStyle": "PackageReference",
"UsingMicrosoftNETSdk": false,
"configFilePaths": [
"/Users/fantasy/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"dependencies": {
"Fantasy-Net": {
"target": "Package",
"version": "[2024.1.17, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/9.0.100/PortableRuntimeIdentifierGraph.json"
}
}
},
"/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj",
"projectName": "Hotfix",
"projectPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj",
"packagesPath": "/Users/fantasy/.nuget/packages/",
"outputPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/obj/",
"projectStyle": "PackageReference",
"UsingMicrosoftNETSdk": false,
"configFilePaths": [
"/Users/fantasy/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {
"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj": {
"projectPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/9.0.100/PortableRuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/Users/fantasy/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/Users/fantasy/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.12.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/Users/fantasy/.nuget/packages/" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)fantasy-net/2024.1.17/buildTransitive/Fantasy-Net.targets" Condition="Exists('$(NuGetPackageRoot)fantasy-net/2024.1.17/buildTransitive/Fantasy-Net.targets')" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,965 @@
{
"version": 3,
"targets": {
"net8.0": {
"CommandLineParser/2.9.1": {
"type": "package",
"compile": {
"lib/netstandard2.0/CommandLine.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/CommandLine.dll": {
"related": ".xml"
}
}
},
"DnsClient/1.6.1": {
"type": "package",
"dependencies": {
"Microsoft.Win32.Registry": "5.0.0"
},
"compile": {
"lib/net5.0/DnsClient.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net5.0/DnsClient.dll": {
"related": ".xml"
}
}
},
"Fantasy-Net/2024.1.17": {
"type": "package",
"dependencies": {
"CommandLineParser": "2.9.1",
"MongoDB.Bson": "3.0.0",
"MongoDB.Driver": "3.0.0",
"Newtonsoft.Json": "13.0.3",
"System.IO.Pipelines": "8.0.0",
"protobuf-net": "3.2.45"
},
"compile": {
"lib/net8.0/Fantasy-Net.dll": {}
},
"runtime": {
"lib/net8.0/Fantasy-Net.dll": {}
},
"frameworkReferences": [
"Microsoft.AspNetCore.App"
],
"build": {
"buildTransitive/Fantasy-Net.targets": {}
}
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {
"type": "package",
"compile": {
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.NETCore.Platforms/5.0.0": {
"type": "package",
"compile": {
"lib/netstandard1.0/_._": {}
},
"runtime": {
"lib/netstandard1.0/_._": {}
}
},
"Microsoft.Win32.Registry/5.0.0": {
"type": "package",
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
},
"compile": {
"ref/netstandard2.0/Microsoft.Win32.Registry.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"related": ".xml"
}
},
"runtimeTargets": {
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": {
"assetType": "runtime",
"rid": "win"
}
}
},
"MongoDB.Bson/3.0.0": {
"type": "package",
"dependencies": {
"System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"compile": {
"lib/net6.0/MongoDB.Bson.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/MongoDB.Bson.dll": {
"related": ".xml"
}
}
},
"MongoDB.Driver/3.0.0": {
"type": "package",
"dependencies": {
"DnsClient": "1.6.1",
"Microsoft.Extensions.Logging.Abstractions": "2.0.0",
"MongoDB.Bson": "3.0.0",
"SharpCompress": "0.30.1",
"Snappier": "1.0.0",
"System.Buffers": "4.5.1",
"ZstdSharp.Port": "0.7.3"
},
"compile": {
"lib/net6.0/MongoDB.Driver.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/MongoDB.Driver.dll": {
"related": ".xml"
}
}
},
"Newtonsoft.Json/13.0.3": {
"type": "package",
"compile": {
"lib/net6.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/Newtonsoft.Json.dll": {
"related": ".xml"
}
}
},
"protobuf-net/3.2.45": {
"type": "package",
"dependencies": {
"protobuf-net.Core": "3.2.45"
},
"compile": {
"lib/net6.0/protobuf-net.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/protobuf-net.dll": {
"related": ".xml"
}
}
},
"protobuf-net.Core/3.2.45": {
"type": "package",
"dependencies": {
"System.Collections.Immutable": "7.0.0"
},
"compile": {
"lib/net6.0/protobuf-net.Core.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net6.0/protobuf-net.Core.dll": {
"related": ".xml"
}
}
},
"SharpCompress/0.30.1": {
"type": "package",
"compile": {
"lib/net5.0/SharpCompress.dll": {}
},
"runtime": {
"lib/net5.0/SharpCompress.dll": {}
}
},
"Snappier/1.0.0": {
"type": "package",
"compile": {
"lib/net5.0/Snappier.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net5.0/Snappier.dll": {
"related": ".xml"
}
}
},
"System.Buffers/4.5.1": {
"type": "package",
"compile": {
"ref/netcoreapp2.0/_._": {}
},
"runtime": {
"lib/netcoreapp2.0/_._": {}
}
},
"System.Collections.Immutable/7.0.0": {
"type": "package",
"compile": {
"lib/net7.0/System.Collections.Immutable.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net7.0/System.Collections.Immutable.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"System.IO.Pipelines/8.0.0": {
"type": "package",
"compile": {
"lib/net8.0/System.IO.Pipelines.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net8.0/System.IO.Pipelines.dll": {
"related": ".xml"
}
},
"build": {
"buildTransitive/net6.0/_._": {}
}
},
"System.Memory/4.5.5": {
"type": "package",
"compile": {
"ref/netcoreapp2.1/_._": {}
},
"runtime": {
"lib/netcoreapp2.1/_._": {}
}
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"type": "package",
"compile": {
"ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": {
"related": ".xml"
}
}
},
"System.Security.AccessControl/5.0.0": {
"type": "package",
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
},
"compile": {
"ref/netstandard2.0/System.Security.AccessControl.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/System.Security.AccessControl.dll": {
"related": ".xml"
}
},
"runtimeTargets": {
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": {
"assetType": "runtime",
"rid": "win"
}
}
},
"System.Security.Principal.Windows/5.0.0": {
"type": "package",
"compile": {
"ref/netcoreapp3.0/System.Security.Principal.Windows.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/netstandard2.0/System.Security.Principal.Windows.dll": {
"related": ".xml"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"assetType": "runtime",
"rid": "unix"
},
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": {
"assetType": "runtime",
"rid": "win"
}
}
},
"ZstdSharp.Port/0.7.3": {
"type": "package",
"compile": {
"lib/net7.0/ZstdSharp.dll": {}
},
"runtime": {
"lib/net7.0/ZstdSharp.dll": {}
}
},
"Entity/1.0.0": {
"type": "project",
"framework": ".NETCoreApp,Version=v8.0",
"dependencies": {
"Fantasy-Net": "2024.1.17"
},
"compile": {
"bin/placeholder/Entity.dll": {}
},
"runtime": {
"bin/placeholder/Entity.dll": {}
}
}
}
},
"libraries": {
"CommandLineParser/2.9.1": {
"sha512": "OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==",
"type": "package",
"path": "commandlineparser/2.9.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"CommandLine20.png",
"License.md",
"README.md",
"commandlineparser.2.9.1.nupkg.sha512",
"commandlineparser.nuspec",
"lib/net40/CommandLine.dll",
"lib/net40/CommandLine.xml",
"lib/net45/CommandLine.dll",
"lib/net45/CommandLine.xml",
"lib/net461/CommandLine.dll",
"lib/net461/CommandLine.xml",
"lib/netstandard2.0/CommandLine.dll",
"lib/netstandard2.0/CommandLine.xml"
]
},
"DnsClient/1.6.1": {
"sha512": "4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==",
"type": "package",
"path": "dnsclient/1.6.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"dnsclient.1.6.1.nupkg.sha512",
"dnsclient.nuspec",
"icon.png",
"lib/net45/DnsClient.dll",
"lib/net45/DnsClient.xml",
"lib/net471/DnsClient.dll",
"lib/net471/DnsClient.xml",
"lib/net5.0/DnsClient.dll",
"lib/net5.0/DnsClient.xml",
"lib/netstandard1.3/DnsClient.dll",
"lib/netstandard1.3/DnsClient.xml",
"lib/netstandard2.0/DnsClient.dll",
"lib/netstandard2.0/DnsClient.xml",
"lib/netstandard2.1/DnsClient.dll",
"lib/netstandard2.1/DnsClient.xml"
]
},
"Fantasy-Net/2024.1.17": {
"sha512": "06mxvByfEvF/ELAiAjaea4aWI5IBbBDyH9sVdPxEOEEtpAbcguaiydUNi2CVBE+ppW+CYsznTXalN0Xk0vAMKQ==",
"type": "package",
"path": "fantasy-net/2024.1.17",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE",
"README.md",
"buildTransitive/Fantasy-Net.targets",
"fantasy-net.2024.1.17.nupkg.sha512",
"fantasy-net.nuspec",
"icon.png",
"lib/net8.0/Fantasy-Net.dll"
]
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {
"sha512": "6ZCllUYGFukkymSTx3Yr0G/ajRxoNJp7/FqSxSB4fGISST54ifBhgu4Nc0ItGi3i6DqwuNd8SUyObmiC++AO2Q==",
"type": "package",
"path": "microsoft.extensions.logging.abstractions/2.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml",
"microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512",
"microsoft.extensions.logging.abstractions.nuspec"
]
},
"Microsoft.NETCore.Platforms/5.0.0": {
"sha512": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
"type": "package",
"path": "microsoft.netcore.platforms/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/netstandard1.0/_._",
"microsoft.netcore.platforms.5.0.0.nupkg.sha512",
"microsoft.netcore.platforms.nuspec",
"runtime.json",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"Microsoft.Win32.Registry/5.0.0": {
"sha512": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"type": "package",
"path": "microsoft.win32.registry/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net46/Microsoft.Win32.Registry.dll",
"lib/net461/Microsoft.Win32.Registry.dll",
"lib/net461/Microsoft.Win32.Registry.xml",
"lib/netstandard1.3/Microsoft.Win32.Registry.dll",
"lib/netstandard2.0/Microsoft.Win32.Registry.dll",
"lib/netstandard2.0/Microsoft.Win32.Registry.xml",
"microsoft.win32.registry.5.0.0.nupkg.sha512",
"microsoft.win32.registry.nuspec",
"ref/net46/Microsoft.Win32.Registry.dll",
"ref/net461/Microsoft.Win32.Registry.dll",
"ref/net461/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/Microsoft.Win32.Registry.dll",
"ref/netstandard1.3/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/de/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/es/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/it/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml",
"ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml",
"ref/netstandard2.0/Microsoft.Win32.Registry.dll",
"ref/netstandard2.0/Microsoft.Win32.Registry.xml",
"runtimes/win/lib/net46/Microsoft.Win32.Registry.dll",
"runtimes/win/lib/net461/Microsoft.Win32.Registry.dll",
"runtimes/win/lib/net461/Microsoft.Win32.Registry.xml",
"runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll",
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll",
"runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.xml",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"MongoDB.Bson/3.0.0": {
"sha512": "qnPRJ58HXDh7C4oxTf6YB7BJhlCGJIa6TMXhzImw6zk44lrAomQXTB6AtoQ5lNJbkyrgQcT7+smsKFMnXmLXhw==",
"type": "package",
"path": "mongodb.bson/3.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net472/MongoDB.Bson.dll",
"lib/net472/MongoDB.Bson.xml",
"lib/net6.0/MongoDB.Bson.dll",
"lib/net6.0/MongoDB.Bson.xml",
"lib/netstandard2.1/MongoDB.Bson.dll",
"lib/netstandard2.1/MongoDB.Bson.xml",
"mongodb.bson.3.0.0.nupkg.sha512",
"mongodb.bson.nuspec",
"packageIcon.png"
]
},
"MongoDB.Driver/3.0.0": {
"sha512": "udcP8rOhyuhLDn3sGVdNUgQSXfKGPaIP4w09XVKf4xdy66YSXinhkIuQSuOeZVHdTFsG2PpUbRx2wyFm7E0EMg==",
"type": "package",
"path": "mongodb.driver/3.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"README.md",
"lib/net472/MongoDB.Driver.dll",
"lib/net472/MongoDB.Driver.xml",
"lib/net6.0/MongoDB.Driver.dll",
"lib/net6.0/MongoDB.Driver.xml",
"lib/netstandard2.1/MongoDB.Driver.dll",
"lib/netstandard2.1/MongoDB.Driver.xml",
"mongodb.driver.3.0.0.nupkg.sha512",
"mongodb.driver.nuspec",
"packageIcon.png"
]
},
"Newtonsoft.Json/13.0.3": {
"sha512": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ==",
"type": "package",
"path": "newtonsoft.json/13.0.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.md",
"README.md",
"lib/net20/Newtonsoft.Json.dll",
"lib/net20/Newtonsoft.Json.xml",
"lib/net35/Newtonsoft.Json.dll",
"lib/net35/Newtonsoft.Json.xml",
"lib/net40/Newtonsoft.Json.dll",
"lib/net40/Newtonsoft.Json.xml",
"lib/net45/Newtonsoft.Json.dll",
"lib/net45/Newtonsoft.Json.xml",
"lib/net6.0/Newtonsoft.Json.dll",
"lib/net6.0/Newtonsoft.Json.xml",
"lib/netstandard1.0/Newtonsoft.Json.dll",
"lib/netstandard1.0/Newtonsoft.Json.xml",
"lib/netstandard1.3/Newtonsoft.Json.dll",
"lib/netstandard1.3/Newtonsoft.Json.xml",
"lib/netstandard2.0/Newtonsoft.Json.dll",
"lib/netstandard2.0/Newtonsoft.Json.xml",
"newtonsoft.json.13.0.3.nupkg.sha512",
"newtonsoft.json.nuspec",
"packageIcon.png"
]
},
"protobuf-net/3.2.45": {
"sha512": "5UZ/ukUHcGbFSl7vNMrHsfjqdxusdd9w7w0fCEXzf3UUtsrGNVCzV5SmF+sCHAbnRV2qPcD1ixiDP7Aj8lX/HA==",
"type": "package",
"path": "protobuf-net/3.2.45",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/net462/protobuf-net.dll",
"lib/net462/protobuf-net.xml",
"lib/net6.0/protobuf-net.dll",
"lib/net6.0/protobuf-net.xml",
"lib/netstandard2.0/protobuf-net.dll",
"lib/netstandard2.0/protobuf-net.xml",
"lib/netstandard2.1/protobuf-net.dll",
"lib/netstandard2.1/protobuf-net.xml",
"protobuf-net.3.2.45.nupkg.sha512",
"protobuf-net.nuspec",
"protobuf-net.png",
"readme.md"
]
},
"protobuf-net.Core/3.2.45": {
"sha512": "PMWatW2NrT1uTXD7etJ4VdQ0wWZLFrIfdRGppD2QX7nzZ0+kIzqhq551u6ZiXJHWJgG4hWFEkSnUnt2aB6posg==",
"type": "package",
"path": "protobuf-net.core/3.2.45",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/net462/protobuf-net.Core.dll",
"lib/net462/protobuf-net.Core.xml",
"lib/net6.0/protobuf-net.Core.dll",
"lib/net6.0/protobuf-net.Core.xml",
"lib/netstandard2.0/protobuf-net.Core.dll",
"lib/netstandard2.0/protobuf-net.Core.xml",
"lib/netstandard2.1/protobuf-net.Core.dll",
"lib/netstandard2.1/protobuf-net.Core.xml",
"protobuf-net.core.3.2.45.nupkg.sha512",
"protobuf-net.core.nuspec",
"protobuf-net.png",
"readme.md"
]
},
"SharpCompress/0.30.1": {
"sha512": "XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==",
"type": "package",
"path": "sharpcompress/0.30.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/net461/SharpCompress.dll",
"lib/net5.0/SharpCompress.dll",
"lib/netcoreapp3.1/SharpCompress.dll",
"lib/netstandard2.0/SharpCompress.dll",
"lib/netstandard2.1/SharpCompress.dll",
"sharpcompress.0.30.1.nupkg.sha512",
"sharpcompress.nuspec"
]
},
"Snappier/1.0.0": {
"sha512": "rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==",
"type": "package",
"path": "snappier/1.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"COPYING.txt",
"lib/net5.0/Snappier.dll",
"lib/net5.0/Snappier.xml",
"lib/netcoreapp3.0/Snappier.dll",
"lib/netcoreapp3.0/Snappier.xml",
"lib/netstandard2.0/Snappier.dll",
"lib/netstandard2.0/Snappier.xml",
"lib/netstandard2.1/Snappier.dll",
"lib/netstandard2.1/Snappier.xml",
"snappier.1.0.0.nupkg.sha512",
"snappier.nuspec"
]
},
"System.Buffers/4.5.1": {
"sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"type": "package",
"path": "system.buffers/4.5.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net461/System.Buffers.dll",
"lib/net461/System.Buffers.xml",
"lib/netcoreapp2.0/_._",
"lib/netstandard1.1/System.Buffers.dll",
"lib/netstandard1.1/System.Buffers.xml",
"lib/netstandard2.0/System.Buffers.dll",
"lib/netstandard2.0/System.Buffers.xml",
"lib/uap10.0.16299/_._",
"ref/net45/System.Buffers.dll",
"ref/net45/System.Buffers.xml",
"ref/netcoreapp2.0/_._",
"ref/netstandard1.1/System.Buffers.dll",
"ref/netstandard1.1/System.Buffers.xml",
"ref/netstandard2.0/System.Buffers.dll",
"ref/netstandard2.0/System.Buffers.xml",
"ref/uap10.0.16299/_._",
"system.buffers.4.5.1.nupkg.sha512",
"system.buffers.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Collections.Immutable/7.0.0": {
"sha512": "dQPcs0U1IKnBdRDBkrCTi1FoajSTBzLcVTpjO4MBCMC7f4pDOIPzgBoX8JjG7X6uZRJ8EBxsi8+DR1JuwjnzOQ==",
"type": "package",
"path": "system.collections.immutable/7.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"README.md",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.Collections.Immutable.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.Collections.Immutable.targets",
"lib/net462/System.Collections.Immutable.dll",
"lib/net462/System.Collections.Immutable.xml",
"lib/net6.0/System.Collections.Immutable.dll",
"lib/net6.0/System.Collections.Immutable.xml",
"lib/net7.0/System.Collections.Immutable.dll",
"lib/net7.0/System.Collections.Immutable.xml",
"lib/netstandard2.0/System.Collections.Immutable.dll",
"lib/netstandard2.0/System.Collections.Immutable.xml",
"system.collections.immutable.7.0.0.nupkg.sha512",
"system.collections.immutable.nuspec",
"useSharedDesignerContext.txt"
]
},
"System.IO.Pipelines/8.0.0": {
"sha512": "FHNOatmUq0sqJOkTx+UF/9YK1f180cnW5FVqnQMvYUN0elp6wFzbtPSiqbo1/ru8ICp43JM1i7kKkk6GsNGHlA==",
"type": "package",
"path": "system.io.pipelines/8.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"buildTransitive/net461/System.IO.Pipelines.targets",
"buildTransitive/net462/_._",
"buildTransitive/net6.0/_._",
"buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets",
"lib/net462/System.IO.Pipelines.dll",
"lib/net462/System.IO.Pipelines.xml",
"lib/net6.0/System.IO.Pipelines.dll",
"lib/net6.0/System.IO.Pipelines.xml",
"lib/net7.0/System.IO.Pipelines.dll",
"lib/net7.0/System.IO.Pipelines.xml",
"lib/net8.0/System.IO.Pipelines.dll",
"lib/net8.0/System.IO.Pipelines.xml",
"lib/netstandard2.0/System.IO.Pipelines.dll",
"lib/netstandard2.0/System.IO.Pipelines.xml",
"system.io.pipelines.8.0.0.nupkg.sha512",
"system.io.pipelines.nuspec",
"useSharedDesignerContext.txt"
]
},
"System.Memory/4.5.5": {
"sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"type": "package",
"path": "system.memory/4.5.5",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net461/System.Memory.dll",
"lib/net461/System.Memory.xml",
"lib/netcoreapp2.1/_._",
"lib/netstandard1.1/System.Memory.dll",
"lib/netstandard1.1/System.Memory.xml",
"lib/netstandard2.0/System.Memory.dll",
"lib/netstandard2.0/System.Memory.xml",
"ref/netcoreapp2.1/_._",
"system.memory.4.5.5.nupkg.sha512",
"system.memory.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"sha512": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
"type": "package",
"path": "system.runtime.compilerservices.unsafe/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net45/System.Runtime.CompilerServices.Unsafe.dll",
"lib/net45/System.Runtime.CompilerServices.Unsafe.xml",
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll",
"lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml",
"lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll",
"lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml",
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
"lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
"ref/net461/System.Runtime.CompilerServices.Unsafe.dll",
"ref/net461/System.Runtime.CompilerServices.Unsafe.xml",
"ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll",
"ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml",
"ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
"ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
"ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll",
"ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.xml",
"system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
"system.runtime.compilerservices.unsafe.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Security.AccessControl/5.0.0": {
"sha512": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"type": "package",
"path": "system.security.accesscontrol/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net46/System.Security.AccessControl.dll",
"lib/net461/System.Security.AccessControl.dll",
"lib/net461/System.Security.AccessControl.xml",
"lib/netstandard1.3/System.Security.AccessControl.dll",
"lib/netstandard2.0/System.Security.AccessControl.dll",
"lib/netstandard2.0/System.Security.AccessControl.xml",
"lib/uap10.0.16299/_._",
"ref/net46/System.Security.AccessControl.dll",
"ref/net461/System.Security.AccessControl.dll",
"ref/net461/System.Security.AccessControl.xml",
"ref/netstandard1.3/System.Security.AccessControl.dll",
"ref/netstandard1.3/System.Security.AccessControl.xml",
"ref/netstandard1.3/de/System.Security.AccessControl.xml",
"ref/netstandard1.3/es/System.Security.AccessControl.xml",
"ref/netstandard1.3/fr/System.Security.AccessControl.xml",
"ref/netstandard1.3/it/System.Security.AccessControl.xml",
"ref/netstandard1.3/ja/System.Security.AccessControl.xml",
"ref/netstandard1.3/ko/System.Security.AccessControl.xml",
"ref/netstandard1.3/ru/System.Security.AccessControl.xml",
"ref/netstandard1.3/zh-hans/System.Security.AccessControl.xml",
"ref/netstandard1.3/zh-hant/System.Security.AccessControl.xml",
"ref/netstandard2.0/System.Security.AccessControl.dll",
"ref/netstandard2.0/System.Security.AccessControl.xml",
"ref/uap10.0.16299/_._",
"runtimes/win/lib/net46/System.Security.AccessControl.dll",
"runtimes/win/lib/net461/System.Security.AccessControl.dll",
"runtimes/win/lib/net461/System.Security.AccessControl.xml",
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll",
"runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.xml",
"runtimes/win/lib/netstandard1.3/System.Security.AccessControl.dll",
"runtimes/win/lib/uap10.0.16299/_._",
"system.security.accesscontrol.5.0.0.nupkg.sha512",
"system.security.accesscontrol.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"System.Security.Principal.Windows/5.0.0": {
"sha512": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==",
"type": "package",
"path": "system.security.principal.windows/5.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"lib/net46/System.Security.Principal.Windows.dll",
"lib/net461/System.Security.Principal.Windows.dll",
"lib/net461/System.Security.Principal.Windows.xml",
"lib/netstandard1.3/System.Security.Principal.Windows.dll",
"lib/netstandard2.0/System.Security.Principal.Windows.dll",
"lib/netstandard2.0/System.Security.Principal.Windows.xml",
"lib/uap10.0.16299/_._",
"ref/net46/System.Security.Principal.Windows.dll",
"ref/net461/System.Security.Principal.Windows.dll",
"ref/net461/System.Security.Principal.Windows.xml",
"ref/netcoreapp3.0/System.Security.Principal.Windows.dll",
"ref/netcoreapp3.0/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/System.Security.Principal.Windows.dll",
"ref/netstandard1.3/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/de/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/es/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/fr/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/it/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/ja/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/ko/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/ru/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml",
"ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml",
"ref/netstandard2.0/System.Security.Principal.Windows.dll",
"ref/netstandard2.0/System.Security.Principal.Windows.xml",
"ref/uap10.0.16299/_._",
"runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll",
"runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml",
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll",
"runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml",
"runtimes/win/lib/net46/System.Security.Principal.Windows.dll",
"runtimes/win/lib/net461/System.Security.Principal.Windows.dll",
"runtimes/win/lib/net461/System.Security.Principal.Windows.xml",
"runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll",
"runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml",
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll",
"runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml",
"runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll",
"runtimes/win/lib/uap10.0.16299/_._",
"system.security.principal.windows.5.0.0.nupkg.sha512",
"system.security.principal.windows.nuspec",
"useSharedDesignerContext.txt",
"version.txt"
]
},
"ZstdSharp.Port/0.7.3": {
"sha512": "U9Ix4l4cl58Kzz1rJzj5hoVTjmbx1qGMwzAcbv1j/d3NzrFaESIurQyg+ow4mivCgkE3S413y+U9k4WdnEIkRA==",
"type": "package",
"path": "zstdsharp.port/0.7.3",
"files": [
".nupkg.metadata",
".signature.p7s",
"lib/net461/ZstdSharp.dll",
"lib/net5.0/ZstdSharp.dll",
"lib/net6.0/ZstdSharp.dll",
"lib/net7.0/ZstdSharp.dll",
"lib/netcoreapp3.1/ZstdSharp.dll",
"lib/netstandard2.0/ZstdSharp.dll",
"lib/netstandard2.1/ZstdSharp.dll",
"zstdsharp.port.0.7.3.nupkg.sha512",
"zstdsharp.port.nuspec"
]
},
"Entity/1.0.0": {
"type": "project",
"path": "../Entity/Entity.csproj",
"msbuildProject": "../Entity/Entity.csproj"
}
},
"projectFileDependencyGroups": {
"net8.0": [
"Entity >= 1.0.0"
]
},
"packageFolders": {
"/Users/fantasy/.nuget/packages/": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj",
"projectName": "Hotfix",
"projectPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj",
"packagesPath": "/Users/fantasy/.nuget/packages/",
"outputPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/obj/",
"projectStyle": "PackageReference",
"UsingMicrosoftNETSdk": false,
"configFilePaths": [
"/Users/fantasy/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net8.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"projectReferences": {
"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj": {
"projectPath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "all"
}
},
"frameworks": {
"net8.0": {
"targetAlias": "net8.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/local/share/dotnet/sdk/9.0.100/PortableRuntimeIdentifierGraph.json"
}
}
}
}

View File

@@ -0,0 +1,30 @@
{
"version": 2,
"dgSpecHash": "1odcgIZCGY0=",
"success": true,
"projectFilePath": "/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj",
"expectedPackageFiles": [
"/Users/fantasy/.nuget/packages/commandlineparser/2.9.1/commandlineparser.2.9.1.nupkg.sha512",
"/Users/fantasy/.nuget/packages/dnsclient/1.6.1/dnsclient.1.6.1.nupkg.sha512",
"/Users/fantasy/.nuget/packages/fantasy-net/2024.1.17/fantasy-net.2024.1.17.nupkg.sha512",
"/Users/fantasy/.nuget/packages/microsoft.extensions.logging.abstractions/2.0.0/microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/microsoft.netcore.platforms/5.0.0/microsoft.netcore.platforms.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/microsoft.win32.registry/5.0.0/microsoft.win32.registry.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/mongodb.bson/3.0.0/mongodb.bson.3.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/mongodb.driver/3.0.0/mongodb.driver.3.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/newtonsoft.json/13.0.3/newtonsoft.json.13.0.3.nupkg.sha512",
"/Users/fantasy/.nuget/packages/protobuf-net/3.2.45/protobuf-net.3.2.45.nupkg.sha512",
"/Users/fantasy/.nuget/packages/protobuf-net.core/3.2.45/protobuf-net.core.3.2.45.nupkg.sha512",
"/Users/fantasy/.nuget/packages/sharpcompress/0.30.1/sharpcompress.0.30.1.nupkg.sha512",
"/Users/fantasy/.nuget/packages/snappier/1.0.0/snappier.1.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.buffers/4.5.1/system.buffers.4.5.1.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.collections.immutable/7.0.0/system.collections.immutable.7.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.io.pipelines/8.0.0/system.io.pipelines.8.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.memory/4.5.5/system.memory.4.5.5.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.runtime.compilerservices.unsafe/5.0.0/system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.security.accesscontrol/5.0.0/system.security.accesscontrol.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/system.security.principal.windows/5.0.0/system.security.principal.windows.5.0.0.nupkg.sha512",
"/Users/fantasy/.nuget/packages/zstdsharp.port/0.7.3/zstdsharp.port.0.7.3.nupkg.sha512"
],
"logs": []
}

View File

@@ -0,0 +1 @@
"restore":{"projectUniqueName":"/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj","projectName":"Hotfix","projectPath":"/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/Hotfix.csproj","outputPath":"/Users/fantasy/Code/ServerLessions/Chat/Server/Hotfix/obj/","projectStyle":"PackageReference","UsingMicrosoftNETSdk":false,"originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj":{"projectPath":"/Users/fantasy/Code/ServerLessions/Chat/Server/Entity/Entity.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"all"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/sdk/9.0.100/PortableRuntimeIdentifierGraph.json"}}

View File

@@ -0,0 +1 @@
17324493181399999

View File

@@ -0,0 +1 @@
17331012454241289

Binary file not shown.

View File

@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<OutputPath>../../Bin/Debug/</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<OutputPath>../../Bin/Release/</OutputPath>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Entity\Entity.csproj" />
<ProjectReference Include="..\Hotfix\Hotfix.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Fantasy-Net.NLog" Version="2024.1.3" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd">
<targets async="true">
<target name="ServerDebug" xsi:type="File"
encoding="UTF-8"
createDirs="true"
autoFlush="false"
keepFileOpen="true"
concurrentWrites="true"
openFileCacheTimeout="30"
openFileFlushTimeout="60"
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Debug.log"
layout="${longdate} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}"/>
</targets>
<targets async="true">
<target name="ServerInfo" xsi:type="File"
encoding="UTF-8"
createDirs="true"
autoFlush="false"
keepFileOpen="true"
concurrentWrites="true"
openFileCacheTimeout="30"
openFileFlushTimeout="60"
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Info.log"
layout="${longdate} ${message}"/>
</targets>
<targets async="true">
<target name="ServerWarn" xsi:type="File"
encoding="UTF-8"
createDirs="true"
autoFlush="false"
keepFileOpen="true"
concurrentWrites="true"
openFileCacheTimeout="30"
openFileFlushTimeout="60"
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Warn.log"
layout="${longdate} ${message}"/>
</targets>
<targets async="true">
<target name="ServerError" xsi:type="File"
encoding="UTF-8"
createDirs="true"
autoFlush="false"
keepFileOpen="true"
concurrentWrites="true"
openFileCacheTimeout="30"
openFileFlushTimeout="60"
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Error.log"
layout="${longdate} ${message}"/>
</targets>
<targets async="true">
<target name="ServerTrace" xsi:type="File"
encoding="UTF-8"
createDirs="true"
autoFlush="false"
keepFileOpen="true"
concurrentWrites="true"
openFileCacheTimeout="30"
openFileFlushTimeout="60"
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Trace.log"
layout="${longdate} ${message}"/>
</targets>
<targets async="true">
<target name="ConsoleColor" xsi:type="ColoredConsole"
useDefaultRowHighlightingRules="false"
layout="${longdate} ${message}">
<highlight-row condition="level == LogLevel.Debug" foregroundColor="DarkGreen" />
<highlight-row condition="level == LogLevel.Info" foregroundColor="Gray" />
<highlight-row condition="level == LogLevel.Warn" foregroundColor="Yellow" />
<highlight-row condition="level == LogLevel.Error" foregroundColor="DarkRed" />
<highlight-row condition="level == LogLevel.Fatal" foregroundColor="Red" />
</target>
</targets>
<rules>
<!-- 控制台 调试或编辑器启动的时候会调用-->
<logger ruleName="ConsoleTrace" name="Server" level="Trace" writeTo="ConsoleColor" />
<logger ruleName="ConsoleDebug" name="Server" level="Debug" writeTo="ConsoleColor" />
<logger ruleName="ConsoleInfo" name="Server" level="Info" writeTo="ConsoleColor" />
<logger ruleName="ConsoleWarn" name="Server" level="Warn" writeTo="ConsoleColor" />
<logger ruleName="ConsoleError" name="Server" level="Error" writeTo="ConsoleColor" />
<!-- 服务端日志输出文件 发布到服务器后会调用-->
<logger ruleName="ServerDebug" name="Server" level="Debug" writeTo="ServerDebug" />
<logger ruleName="ServerTrace" name="Server" level="Trace" writeTo="ServerTrace" />
<logger ruleName="ServerInfo" name="Server" level="Info" writeTo="ServerInfo" />
<logger ruleName="ServerWarn" name="Server" level="Warn" writeTo="ServerWarn" />
<logger ruleName="ServerError" name="Server" level="Error" writeTo="ServerError" />
</rules>
</nlog>

Some files were not shown because too many files have changed in this diff Show More