提交示例代码
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
28
聊天系统课程代码/Server/Hotfix/Chat/Helper/ChatHelper.cs
Normal file
28
聊天系统课程代码/Server/Hotfix/Chat/Helper/ChatHelper.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
126
聊天系统课程代码/Server/Hotfix/Chat/Helper/ChatNodeFactory.cs
Normal file
126
聊天系统课程代码/Server/Hotfix/Chat/Helper/ChatNodeFactory.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
248
聊天系统课程代码/Server/Hotfix/Chat/Helper/ChatSceneHelper.cs
Normal file
248
聊天系统课程代码/Server/Hotfix/Chat/Helper/ChatSceneHelper.cs
Normal 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
|
||||
}
|
||||
119
聊天系统课程代码/Server/Hotfix/Chat/Helper/ChatTreeFactory.cs
Normal file
119
聊天系统课程代码/Server/Hotfix/Chat/Helper/ChatTreeFactory.cs
Normal 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,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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}");
|
||||
}
|
||||
}
|
||||
21
聊天系统课程代码/Server/Hotfix/Chat/System/ChatUnitSystem.cs
Normal file
21
聊天系统课程代码/Server/Hotfix/Chat/System/ChatUnitSystem.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
117
聊天系统课程代码/Server/Hotfix/Gate/Helper/GateLoginHelper.cs
Normal file
117
聊天系统课程代码/Server/Hotfix/Gate/Helper/GateLoginHelper.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
105
聊天系统课程代码/Server/Hotfix/Gate/Helper/GateUnitHelper.cs
Normal file
105
聊天系统课程代码/Server/Hotfix/Gate/Helper/GateUnitHelper.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
14
聊天系统课程代码/Server/Hotfix/Gate/System/GateUnitSystem.cs
Normal file
14
聊天系统课程代码/Server/Hotfix/Gate/System/GateUnitSystem.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
13
聊天系统课程代码/Server/Hotfix/Hotfix.csproj
Normal file
13
聊天系统课程代码/Server/Hotfix/Hotfix.csproj
Normal 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>
|
||||
17
聊天系统课程代码/Server/Hotfix/Map/G2M_LoginRequestHandler.cs
Normal file
17
聊天系统课程代码/Server/Hotfix/Map/G2M_LoginRequestHandler.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
32
聊天系统课程代码/Server/Hotfix/OnSceneCreate_Init.cs
Normal file
32
聊天系统课程代码/Server/Hotfix/OnSceneCreate_Init.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
BIN
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Entity.dll
Normal file
BIN
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Entity.dll
Normal file
Binary file not shown.
BIN
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Entity.pdb
Normal file
BIN
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Entity.pdb
Normal file
Binary file not shown.
324
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Hotfix.deps.json
Normal file
324
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Hotfix.deps.json
Normal 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": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Hotfix.dll
Normal file
BIN
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Hotfix.dll
Normal file
Binary file not shown.
BIN
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Hotfix.pdb
Normal file
BIN
聊天系统课程代码/Server/Hotfix/bin/Debug/net8.0/Hotfix.pdb
Normal file
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
|
||||
@@ -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 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
28c7ffb99846e407a4d90a66ddc760b2a3412294f39e5810dd7ee1d10f0462a6
|
||||
@@ -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 =
|
||||
@@ -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;
|
||||
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/Hotfix.assets.cache
Normal file
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/Hotfix.assets.cache
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
db031dae618f2e362a528e6b2e15efd97c27daebca134f658fc2c17b89aba129
|
||||
@@ -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
|
||||
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/Hotfix.dll
Normal file
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/Hotfix.dll
Normal file
Binary file not shown.
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/Hotfix.pdb
Normal file
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/Hotfix.pdb
Normal file
Binary file not shown.
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/ref/Hotfix.dll
Normal file
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/ref/Hotfix.dll
Normal file
Binary file not shown.
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/refint/Hotfix.dll
Normal file
BIN
聊天系统课程代码/Server/Hotfix/obj/Debug/net8.0/refint/Hotfix.dll
Normal file
Binary file not shown.
136
聊天系统课程代码/Server/Hotfix/obj/Hotfix.csproj.nuget.dgspec.json
Normal file
136
聊天系统课程代码/Server/Hotfix/obj/Hotfix.csproj.nuget.dgspec.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
15
聊天系统课程代码/Server/Hotfix/obj/Hotfix.csproj.nuget.g.props
Normal file
15
聊天系统课程代码/Server/Hotfix/obj/Hotfix.csproj.nuget.g.props
Normal 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>
|
||||
6
聊天系统课程代码/Server/Hotfix/obj/Hotfix.csproj.nuget.g.targets
Normal file
6
聊天系统课程代码/Server/Hotfix/obj/Hotfix.csproj.nuget.g.targets
Normal 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>
|
||||
965
聊天系统课程代码/Server/Hotfix/obj/project.assets.json
Normal file
965
聊天系统课程代码/Server/Hotfix/obj/project.assets.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
聊天系统课程代码/Server/Hotfix/obj/project.nuget.cache
Normal file
30
聊天系统课程代码/Server/Hotfix/obj/project.nuget.cache
Normal 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": []
|
||||
}
|
||||
1
聊天系统课程代码/Server/Hotfix/obj/project.packagespec.json
Normal file
1
聊天系统课程代码/Server/Hotfix/obj/project.packagespec.json
Normal 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"}}
|
||||
@@ -0,0 +1 @@
|
||||
17324493181399999
|
||||
1
聊天系统课程代码/Server/Hotfix/obj/rider.project.restore.info
Normal file
1
聊天系统课程代码/Server/Hotfix/obj/rider.project.restore.info
Normal file
@@ -0,0 +1 @@
|
||||
17331012454241289
|
||||
Reference in New Issue
Block a user