提交示例代码
This commit is contained in:
BIN
邮件系统课程完整代码/Server/Hotfix/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/Hotfix/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,36 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Entitas.Interface;
|
||||
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class GateAccountFlagComponentSystem : DestroySystem<GateAccountFlagComponent>
|
||||
{
|
||||
protected override void Destroy(GateAccountFlagComponent self)
|
||||
{
|
||||
// DestroyAsync(self).Coroutine();
|
||||
|
||||
var selfAccount = self.Account;
|
||||
if (selfAccount == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var selfAccountMailRouteId = selfAccount.MailRouteId;
|
||||
GateLoginHelper.Offline(self.Scene, selfAccountMailRouteId).Coroutine();
|
||||
self.Account = null;
|
||||
selfAccount.Dispose();
|
||||
}
|
||||
|
||||
// private async FTask DestroyAsync(GateAccountFlagComponent self)
|
||||
// {
|
||||
// var selfAccount = self.Account;
|
||||
// if (selfAccount == null)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// await GateLoginHelper.Offline(self.Scene,selfAccount.MailRouteId)
|
||||
// self.Account = null;
|
||||
// selfAccount.Dispose();
|
||||
// }
|
||||
}
|
||||
23
邮件系统课程完整代码/Server/Hotfix/Gate/Handler/C2G_ExitHandler.cs
Normal file
23
邮件系统课程完整代码/Server/Hotfix/Gate/Handler/C2G_ExitHandler.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network;
|
||||
using Fantasy.Network.Interface;
|
||||
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class C2G_ExitHandler : Message<C2G_Exit>
|
||||
{
|
||||
protected override async FTask Run(Session session, C2G_Exit message)
|
||||
{
|
||||
var gateAccountFlagComponent = session.GetComponent<GateAccountFlagComponent>();
|
||||
if (gateAccountFlagComponent == null)
|
||||
{
|
||||
Log.Warning($"有用户不是通过正常途径访问到这个接口,IP:{session.RemoteEndPoint.ToString()}");
|
||||
return;
|
||||
}
|
||||
Log.Debug($"用户名:{gateAccountFlagComponent.Account.Name} 退出游戏的协议。");
|
||||
// 如果执行了这个session.Dispose,就会断开这个连接,这样的情况下,客户端也会断开。
|
||||
session.Dispose();
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Entitas;
|
||||
using Fantasy.Helper;
|
||||
using Fantasy.Network;
|
||||
using Fantasy.Network.Interface;
|
||||
#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type.
|
||||
|
||||
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)
|
||||
{
|
||||
var scene = session.Scene;
|
||||
if (string.IsNullOrEmpty(request.Name))
|
||||
{
|
||||
// 返回的1代表的用户名为空。
|
||||
response.ErrorCode = 1;
|
||||
return;
|
||||
}
|
||||
Log.Debug($"登陆的用户名为:{request.Name}");
|
||||
// 检查用户是否存在
|
||||
Account account = null;
|
||||
var worldDataBase = scene.World.DataBase;
|
||||
// 用协程锁来处理,异步逻辑的原子问题。
|
||||
using (await scene.CoroutineLockComponent.Wait(CoroutineLockConst.LoginKey, request.Name.GetHashCode()))
|
||||
{
|
||||
account = await worldDataBase.First<Account>(d => d.Name == request.Name, true);
|
||||
// 如果用户不存在,则创建一个用户。并且保存到数据库中.
|
||||
if (account == null)
|
||||
{
|
||||
account = Entity.Create<Account>(scene, true, true);
|
||||
account.Name = request.Name;
|
||||
account.CreateTime = TimeHelper.Now;
|
||||
await worldDataBase.Save(account);
|
||||
Log.Debug($"当前账号:{request.Name} 不存在,所以创建了一个新的账号。");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Debug($"当前账号:{request.Name} 已经存在,直接登陆。");
|
||||
}
|
||||
}
|
||||
// 跟Session关联上Account,下次发送消息,直接可以通过GateAccountFlagComponent来获取Account。
|
||||
session.AddComponent<GateAccountFlagComponent>().Account = account;
|
||||
// 登陆到其他服务器。
|
||||
var result = await GateLoginHelper.Online(session, account);
|
||||
if (result != 0)
|
||||
{
|
||||
response.ErrorCode = result;
|
||||
Log.Error($"登陆到其他服务器失败,ErrorCode:{result}");
|
||||
return;
|
||||
}
|
||||
Log.Debug($"登陆成功 Name:{account.Name}");
|
||||
// 用这个方法来暂时消除async的黄色波浪线。这个只是为了消除黄色的波浪线,如果有await这个就可以不用。
|
||||
// await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
69
邮件系统课程完整代码/Server/Hotfix/Gate/Helper/GateLoginHelper.cs
Normal file
69
邮件系统课程完整代码/Server/Hotfix/Gate/Helper/GateLoginHelper.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network;
|
||||
using Fantasy.Platform.Net;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public static class GateLoginHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Gate服务器登陆到其他服务器接口
|
||||
/// </summary>
|
||||
/// <param name="session"></param>
|
||||
/// <param name="account"></param>
|
||||
/// <returns></returns>
|
||||
public static async FTask<uint> Online(Session session, Account account)
|
||||
{
|
||||
// 这里应该编写登陆到其他服务器的逻辑,现在没有暂时空着.
|
||||
// 1、如何得到Mail服务器的地址。✅
|
||||
// 2、如何做到发送到Gate服务器自动中间消息给Mail。
|
||||
// 3、就算是Gate可以中间Mail消息到Mail服务器了,那Mail如何发送消息给Gate再让Gate自动的发送消息给客户端呢。
|
||||
var scene = session.Scene;
|
||||
|
||||
var mailConfig = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Mail)[0];
|
||||
// 挂载自定义路由协议组件,挂载了这个组件后,就可以自动转发Route协议了。
|
||||
var routeComponent = session.GetOrAddComponent<RouteComponent>();
|
||||
// var mailAddress = "127.0.0.1" + mailConfig.InnerPort;
|
||||
//mailConfig.RouteId 423423445678974
|
||||
// 发送服务器之间的消息,需要通过当前Scene的NetworkMessagingComponent组件来进行发送。
|
||||
var response = (Mail2G_LoginResponse)await scene.NetworkMessagingComponent.CallInnerRoute(mailConfig.RouteId, new G2Mail_LoginRequest()
|
||||
{
|
||||
AccountId = account.Id,
|
||||
Name = account.Name,
|
||||
CreateTime = account.CreateTime,
|
||||
GateRouteId = session.RuntimeId
|
||||
});
|
||||
if (response.ErrorCode != 0)
|
||||
{
|
||||
return response.ErrorCode;
|
||||
}
|
||||
// 保存这个MailUnitRouteId,用于后续的下线等操作。
|
||||
account.MailRouteId = response.MailUnitRouteId;
|
||||
// 添加自定义路由协议地址。
|
||||
routeComponent.AddAddress(RouteType.MailRoute, response.MailUnitRouteId);
|
||||
// // Gate服务器发送一个消息给Mail服务器
|
||||
// scene.NetworkMessagingComponent.SendInnerRoute(response.MailUnitRouteId,new G2Mail_TestMessage()
|
||||
// {
|
||||
// Tag = "666"
|
||||
// });
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gate服务器下线其他服务器接口
|
||||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="mailRouteId"></param>
|
||||
/// <returns></returns>
|
||||
public static async FTask<uint> Offline(Scene scene, long mailRouteId)
|
||||
{
|
||||
// 给Mail服务器发送下线消息
|
||||
var mailResponse = (Mail2G_ExitResponse)await scene.NetworkMessagingComponent.CallInnerRoute(mailRouteId, new G2Mail_ExitRequest());
|
||||
if (mailResponse.ErrorCode != 0)
|
||||
{
|
||||
Log.Error($"Mail服务器无法正常下线 ErrorCode:{mailResponse.ErrorCode}");
|
||||
return mailResponse.ErrorCode;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
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>
|
||||
@@ -0,0 +1,225 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.DataStructure.Collection;
|
||||
using Fantasy.Entitas.Interface;
|
||||
using Fantasy.Helper;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class MailBoxManageComponentDestroySystem : DestroySystem<MailBoxManageComponent>
|
||||
{
|
||||
protected override void Destroy(MailBoxManageComponent self)
|
||||
{
|
||||
if (self.TimerId != 0)
|
||||
{
|
||||
self.Scene.TimerComponent.Net.Remove(ref self.TimerId);
|
||||
}
|
||||
|
||||
foreach (var (_, mailBox) in self.MailBoxes)
|
||||
{
|
||||
mailBox.Dispose();
|
||||
}
|
||||
|
||||
self.MinTime = 0;
|
||||
self.MailsByAccount.Clear();
|
||||
self.MailsByMailBoxType.Clear();
|
||||
self.Timers.Clear();
|
||||
self.TimeOutQueue.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public static class MailBoxManageComponentSystem
|
||||
{
|
||||
public static async FTask Init(this MailBoxManageComponent self)
|
||||
{
|
||||
// 获取数据库中所有的没有处理完成的MailBox
|
||||
|
||||
var mailBoxes = await self.Scene.World.DataBase.Query<MailBox>(d => true);
|
||||
|
||||
foreach (var mailBox in mailBoxes)
|
||||
{
|
||||
self.MailBoxes.Add(mailBox.Id, mailBox);
|
||||
|
||||
switch (mailBox.MailBoxType)
|
||||
{
|
||||
case MailBoxType.Specify:
|
||||
{
|
||||
foreach (var accountId in mailBox.AccountId)
|
||||
{
|
||||
self.MailsByAccount.Add(accountId, mailBox);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case MailBoxType.All:
|
||||
case MailBoxType.AllToDate:
|
||||
{
|
||||
self.MailsByMailBoxType.Add((int)mailBox.MailBoxType, mailBox);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
self.TimerId = self.Scene.TimerComponent.Net.RepeatedTimer(MailBoxManageComponent.MailCheckTIme, self.Timeout);
|
||||
}
|
||||
|
||||
private static void Timeout(this MailBoxManageComponent self)
|
||||
{
|
||||
var currentTime = TimeHelper.Now;
|
||||
|
||||
if (currentTime < self.MinTime)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查当然时候有过期的邮件箱需要处理
|
||||
|
||||
foreach (var (timeKey, _) in self.Timers)
|
||||
{
|
||||
if (timeKey > currentTime)
|
||||
{
|
||||
self.MinTime = timeKey;
|
||||
break;
|
||||
}
|
||||
|
||||
self.TimeOutQueue.Enqueue(timeKey);
|
||||
}
|
||||
|
||||
while (self.TimeOutQueue.TryDequeue(out var timeKey))
|
||||
{
|
||||
foreach (var mailBoxId in self.Timers[timeKey])
|
||||
{
|
||||
Log.Info($"MailBox:{mailBoxId} 过期了!");
|
||||
self.Remove(mailBoxId).Coroutine();
|
||||
}
|
||||
|
||||
self.Timers.RemoveKey(timeKey);
|
||||
}
|
||||
}
|
||||
|
||||
public static async FTask Remove(this MailBoxManageComponent self, long mailBoxId)
|
||||
{
|
||||
if (!self.MailBoxes.Remove(mailBoxId, out var mailBox))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 先删除按照分类存储的邮箱
|
||||
self.MailsByMailBoxType.RemoveValue((int)mailBox.MailBoxType, mailBox);
|
||||
// 删除个人邮件的邮件箱
|
||||
self.MailsByAccount.RemoveValue(mailBoxId, mailBox);
|
||||
// 在数据库中删除这个邮件
|
||||
await self.Scene.World.DataBase.Remove<MailBox>(mailBoxId);
|
||||
// 销毁这个MailBox
|
||||
mailBox.Dispose();
|
||||
}
|
||||
|
||||
public static async FTask GetHaveMail(this MailBoxManageComponent self, MailUnit mailUnit, bool sync)
|
||||
{
|
||||
var now = TimeHelper.Now;
|
||||
var worldDataBase = self.Scene.World.DataBase;
|
||||
var mailComponent = mailUnit.GetComponent<MailComponent>();
|
||||
|
||||
// 玩家领取范围邮件的逻辑处理
|
||||
|
||||
foreach (var (mailBoxType, mailBoxList) in self.MailsByMailBoxType)
|
||||
{
|
||||
using var removeMailBox = ListPool<MailBox>.Create();
|
||||
switch ((MailBoxType)mailBoxType)
|
||||
{
|
||||
// 发送给所有人的邮件
|
||||
case MailBoxType.All:
|
||||
{
|
||||
foreach (var mailBox in mailBoxList)
|
||||
{
|
||||
if (!mailBox.Received.Contains(mailUnit.Id))
|
||||
{
|
||||
// 如果是没有领取过这个邮件,首先要把自己添加到领取过的名单中。
|
||||
mailBox.Received.Add(mailUnit.Id);
|
||||
// 发送给自己的邮件列表里添加邮件。
|
||||
await mailUnit.GetComponent<MailComponent>().Add(MailFactory.Serializer.Clone(mailBox.Mail), true);
|
||||
}
|
||||
|
||||
if (mailBox.ExpireTime <= now)
|
||||
{
|
||||
// 邮件已经过期了,要进行清理这个邮件的操作了
|
||||
removeMailBox.Add(mailBox);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 保存邮件箱状态到数据库中。
|
||||
await worldDataBase.Save(mailBox);
|
||||
}
|
||||
|
||||
foreach (var mailBox in removeMailBox)
|
||||
{
|
||||
await self.Remove(mailBox.Id);
|
||||
}
|
||||
|
||||
// 这里有一个小的细节要处理,这里大家课下自己实现一下。
|
||||
break;
|
||||
}
|
||||
case MailBoxType.AllToDate:
|
||||
{
|
||||
foreach (var mailBox in mailBoxList)
|
||||
{
|
||||
Log.Debug($"mailBox.CreateTime >= mailUnit.CreateTime {mailBox.CreateTime} >= {mailUnit.CreateTime}");
|
||||
if (mailBox.CreateTime >= mailUnit.CreateTime && !mailBox.Received.Contains(mailUnit.Id))
|
||||
{
|
||||
// 如果是没有领取过这个邮件,首先要把自己添加到领取过的名单中。
|
||||
mailBox.Received.Add(mailUnit.Id);
|
||||
// 发送给自己的邮件列表里添加邮件。
|
||||
await mailUnit.GetComponent<MailComponent>().Add(MailFactory.Serializer.Clone(mailBox.Mail), true);
|
||||
}
|
||||
|
||||
if (mailBox.ExpireTime <= now)
|
||||
{
|
||||
// 邮件已经过期了,要进行清理这个邮件的操作了
|
||||
removeMailBox.Add(mailBox);
|
||||
continue;
|
||||
}
|
||||
|
||||
// 保存邮件箱状态到数据库中。
|
||||
await worldDataBase.Save(mailBox);
|
||||
}
|
||||
|
||||
foreach (var mailBox in removeMailBox)
|
||||
{
|
||||
await self.Remove(mailBox.Id);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (self.MailsByAccount.TryGetValue(mailUnit.AccountId, out var mailBoxes))
|
||||
{
|
||||
using var removeMailBox = ListPool<MailBox>.Create();
|
||||
foreach (var mailBox in mailBoxes)
|
||||
{
|
||||
var cloneMail = MailFactory.Serializer.Clone(mailBox.Mail);
|
||||
await mailComponent.Add(cloneMail, sync);
|
||||
mailBox.AccountId.Remove(mailUnit.AccountId);
|
||||
Log.Debug($"领取了一个离线邮件 MailId:{cloneMail.Id}");
|
||||
|
||||
if (mailBox.AccountId.Count <= 0)
|
||||
{
|
||||
// 当邮件箱里没有要发送的玩家了,就表示这个邮件箱已经没有用处,可以删除了。
|
||||
removeMailBox.Add(mailBox);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var mailBox in removeMailBox)
|
||||
{
|
||||
await self.Remove(mailBox.Id);
|
||||
}
|
||||
|
||||
if (mailBoxes.Count <= 0)
|
||||
{
|
||||
// 如果MailsByAccount里的邮件箱已经没有邮件了,就删除这个邮件箱的缓存。
|
||||
self.MailsByAccount.RemoveByKey(mailUnit.AccountId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
226
邮件系统课程完整代码/Server/Hotfix/Mail/Components/MailComponentSystem.cs
Normal file
226
邮件系统课程完整代码/Server/Hotfix/Mail/Components/MailComponentSystem.cs
Normal file
@@ -0,0 +1,226 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.DataStructure.Collection;
|
||||
using Fantasy.Entitas.Interface;
|
||||
using Fantasy.Helper;
|
||||
#pragma warning disable CS8619 // Nullability of reference types in value doesn't match target type.
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class MailComponentDestroySystem : DestroySystem<MailComponent>
|
||||
{
|
||||
protected override void Destroy(MailComponent self)
|
||||
{
|
||||
foreach (var (_, mail) in self.Mails)
|
||||
{
|
||||
mail.Dispose();
|
||||
}
|
||||
|
||||
self.Mails.Clear();
|
||||
self.Timer.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public class MailComponentDeserializeSystem : DeserializeSystem<MailComponent>
|
||||
{
|
||||
protected override void Deserialize(MailComponent self)
|
||||
{
|
||||
self.Timer.Clear();
|
||||
foreach (var (_, mail) in self.Mails)
|
||||
{
|
||||
self.Timer.Add(mail.ExpireTime, mail.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class MailComponentSystem
|
||||
{
|
||||
public static async FTask Add(this MailComponent self, Mail mail, bool sync)
|
||||
{
|
||||
mail.CreateTime = TimeHelper.Now;
|
||||
mail.ExpireTime = mail.CreateTime + MailComponent.MailExpireTime;
|
||||
|
||||
// 如果身上的邮件数量,大于了设置的最大数量怎么办?
|
||||
// 先不用考虑,稍后咱们再解决问题。
|
||||
if (self.Mails.Count >= MailComponent.MaxMailCount)
|
||||
{
|
||||
// 删除最老的邮件。
|
||||
var (_, value) = self.Timer.First();
|
||||
var removeId = value[0];
|
||||
await self.Remove(removeId, MailRemoveActionType.Overtop, sync);
|
||||
}
|
||||
|
||||
self.Mails.Add(mail.Id, mail);
|
||||
self.Timer.Add(mail.ExpireTime, mail.Id);
|
||||
|
||||
if (sync)
|
||||
{
|
||||
// 同步邮件状态给客户端。
|
||||
self.Scene.NetworkMessagingComponent.SendInnerRoute(self.GetParent<MailUnit>().GateRouteId, new Mail2C_HaveMail()
|
||||
{
|
||||
Mail = mail.ToMailSimplifyInfo()
|
||||
});
|
||||
}
|
||||
|
||||
// 这里的保存,也可以不用,这里看情况而定。
|
||||
await self.Scene.World.DataBase.Save(self);
|
||||
Log.Info($"MailComponentSystem Add {mail.Id} Count:{self.Mails.Count}");
|
||||
}
|
||||
|
||||
public static async FTask<uint> Remove(this MailComponent self, long mailId, MailRemoveActionType mailRemoveActionType ,bool sync)
|
||||
{
|
||||
if (!self.Mails.Remove(mailId, out var mail))
|
||||
{
|
||||
// 这里的1代表的没有找到对应邮件。
|
||||
return 1;
|
||||
}
|
||||
|
||||
self.Timer.RemoveValue(mail.ExpireTime, mail.Id);
|
||||
mail.Dispose();
|
||||
|
||||
if (sync)
|
||||
{
|
||||
// 同步给客户端,邮件删除的消息。
|
||||
self.Scene.NetworkMessagingComponent.SendInnerRoute(self.GetParent<MailUnit>().GateRouteId,
|
||||
new Mail2C_MailState()
|
||||
{
|
||||
MailState = (int)mailRemoveActionType, MailId = mailId
|
||||
});
|
||||
}
|
||||
|
||||
// 保存下数据库。
|
||||
await self.Scene.World.DataBase.Save(self);
|
||||
Log.Info($"MailComponentSystem Remove {mailId} mailRemoveActionType:{mailRemoveActionType} Count:{self.Mails.Count}");
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static async FTask CheckTimeOut(this MailComponent self)
|
||||
{
|
||||
var now = TimeHelper.Now;
|
||||
using var listPool = ListPool<long>.Create();
|
||||
|
||||
foreach (var (_, mail) in self.Mails)
|
||||
{
|
||||
if (mail.ExpireTime > now)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
listPool.Add(mail.Id);
|
||||
}
|
||||
|
||||
foreach (var mailId in listPool)
|
||||
{
|
||||
await self.Remove(mailId, MailRemoveActionType.ExpireTimeRemove,false);
|
||||
}
|
||||
|
||||
Log.Info($"MailComponentSystem CheckTimeOut Count:{listPool.Count}");
|
||||
}
|
||||
|
||||
public static async FTask<(uint ErrorCode, Mail mail)> OpenMail(this MailComponent self, long mailId)
|
||||
{
|
||||
if (!self.Mails.TryGetValue(mailId, out var mail))
|
||||
{
|
||||
// 这个1代表的是没有找到对应邮件
|
||||
return (1, null);
|
||||
}
|
||||
|
||||
if (mail.ExpireTime < TimeHelper.Now)
|
||||
{
|
||||
// 如果邮件已经过期了,需要清楚这个邮件。
|
||||
await self.Remove(mailId, MailRemoveActionType.ExpireTimeRemove, true);
|
||||
// 这里2代表的是邮件已经过期。
|
||||
return (2, null);
|
||||
}
|
||||
|
||||
mail.MailState = MailState.HaveRead;
|
||||
// 这个保存数据库不是必须要保存的,因为一个邮件的查看状态并不能影响游戏的逻辑。
|
||||
// 这里的话,大家看自己的需求而定。
|
||||
await self.Scene.World.DataBase.Save(self);
|
||||
return (0, mail);
|
||||
}
|
||||
|
||||
public static void GetMailSimplifyInfos(this MailComponent self, ICollection<MailSimplifyInfo> mailSimplifyInfos)
|
||||
{
|
||||
foreach (var (_, mail) in self.Mails)
|
||||
{
|
||||
mailSimplifyInfos.Add(mail.ToMailSimplifyInfo());
|
||||
}
|
||||
}
|
||||
|
||||
public static void GetMailSimplifyInfos(this MailComponent self, ICollection<MailSimplifyInfo> mailSimplifyInfos, int pageIndex, int pageSize)
|
||||
{
|
||||
foreach (var (_, mail) in self.Mails.Skip((pageIndex -1) * pageSize).Take(pageSize))
|
||||
{
|
||||
mailSimplifyInfos.Add(mail.ToMailSimplifyInfo());
|
||||
}
|
||||
}
|
||||
|
||||
public static async FTask<uint> Receive(this MailComponent self, long mailId, bool money, List<long> item, bool sync)
|
||||
{
|
||||
if (!self.Mails.TryGetValue(mailId, out var mail))
|
||||
{
|
||||
// 这里的1代表是没有找到该邮件。
|
||||
return 1;
|
||||
}
|
||||
|
||||
var needSave = false;
|
||||
|
||||
if (money && mail.Money > 0)
|
||||
{
|
||||
// 领取金钱一般都是在玩家身上,但现在咱们所在的服务器是Mail服务器,玩家并不在这个服务器.
|
||||
// 所以一般金钱的操作会有一个专用的接口来操作。这个接口无论在什么服务器上,都会正确的发送到用户所在的服务器上进行金钱操作。
|
||||
// 假设下面的增加金钱的一个异步接口。
|
||||
// var resposne = await MoneyHelper.Add(self.Scene, mail.Money, sync);
|
||||
// if (resposne.ErrorCode != 0)
|
||||
// {
|
||||
// // 这里的2代表的是金钱添加失败。
|
||||
// return 2;
|
||||
// }
|
||||
// 再假设增加金钱是成功的,那么咱们就要处理邮件相关信息了。
|
||||
mail.Money = 0;
|
||||
needSave = true;
|
||||
}
|
||||
|
||||
if (item != null && item.Count > 0)
|
||||
{
|
||||
using var listItem = ListPool<Item>.Create();
|
||||
foreach (var itemId in item)
|
||||
{
|
||||
var rItem = mail.Items.FirstOrDefault(d => d.Id == itemId);
|
||||
if (rItem == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
listItem.Add(rItem);
|
||||
}
|
||||
|
||||
// 假设背包在其他服务器,需要调用某一个接口来添加物品到目标服务器的背包身上。
|
||||
// var response = await BagHelper.Add(self.Scene, listItem, sync);
|
||||
// if (response.ErrorCode != 0)
|
||||
// {
|
||||
// return 2;
|
||||
// }
|
||||
// 还有一种情况,就是背包里的空间只有一个空余位置了,也就是只能放进一个物品了,但是邮件领取的是2个物品.
|
||||
// 会有下面2中情况,当然这个情况是要策划来决定怎么处理:
|
||||
// 1、只领取一个物品到背包中,另外一个不领取,然后提示用户背包已满。
|
||||
// 2、一个都不领取,直接提示用户背包已满。
|
||||
// 如果是是第一种情况下,把BagHelper.Add接口,就需要返回添加成功的物品ID,方便邮件来处理。
|
||||
// 假设全部物品都领取成功了,就可以执行下面的逻辑了。
|
||||
|
||||
foreach (var item1 in listItem)
|
||||
{
|
||||
mail.Items.Remove(item1);
|
||||
item1.Dispose();
|
||||
}
|
||||
|
||||
needSave = true;
|
||||
}
|
||||
|
||||
if (needSave)
|
||||
{
|
||||
await self.Scene.World.DataBase.Save(self);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,176 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Entitas;
|
||||
using Fantasy.Entitas.Interface;
|
||||
using Fantasy.Helper;
|
||||
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||
#pragma warning disable CS8601 // Possible null reference assignment.
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class MailUnitManageComponentDestroySystem : DestroySystem<MailUnitManageComponent>
|
||||
{
|
||||
protected override void Destroy(MailUnitManageComponent self)
|
||||
{
|
||||
// 如果不是在.net8的环境下,比如是Unity里。这个的foreach有可能会出现问题
|
||||
// 问题的原因是有可能你在mailUnit组件的销毁的时候,去UnitByAccountId删除。
|
||||
// 这样就会出现了一个经典的错误,就是无法再foreach里删除或改变元素。
|
||||
foreach (var (_, mailUnit) in self.UnitByAccountId)
|
||||
{
|
||||
mailUnit.Dispose();
|
||||
}
|
||||
|
||||
self.UnitByAccountId.Clear();
|
||||
self.UnitByName.Clear();
|
||||
self.Online.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public static class MailUnitManageComponentSystem
|
||||
{
|
||||
public static async FTask Init(this MailUnitManageComponent self)
|
||||
{
|
||||
var units = await self.Scene.World.DataBase.Query<MailUnit>(d => true, true);
|
||||
foreach (var mailUnit in units)
|
||||
{
|
||||
self.UnitByName.Add(mailUnit.Name, mailUnit);
|
||||
self.UnitByAccountId.Add(mailUnit.AccountId,mailUnit);
|
||||
}
|
||||
Log.Debug($"MailUnitManageComponent Init units:{units.Count}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 用户中心登录逻辑,如果有更新的数据,会自动更新。
|
||||
/// </summary>
|
||||
/// <param name="self"></param>
|
||||
/// <param name="accountId"></param>
|
||||
/// <param name="unitName"></param>
|
||||
/// <param name="gateRouteId"></param>
|
||||
/// <returns></returns>
|
||||
public static async FTask<MailUnit> Online(this MailUnitManageComponent self, long accountId, string unitName, long gateRouteId)
|
||||
{
|
||||
var selfScene = self.Scene;
|
||||
|
||||
if (self.UnitByAccountId.TryGetValue(accountId, out var mailUnit))
|
||||
{
|
||||
Log.Debug($"用户已经存在行不需要重新创建 Name:{unitName} mailUnit:{mailUnit.RuntimeId}");
|
||||
if (mailUnit.Name != unitName)
|
||||
{
|
||||
// 如果不一致的情况,要先删除之前的缓存,然后再添加到缓存。
|
||||
self.UnitByName.Remove(mailUnit.Name);
|
||||
self.UnitByName.Add(unitName, mailUnit);
|
||||
mailUnit.Name = unitName;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 创建新的MailUnit实体。
|
||||
mailUnit = Entity.Create<MailUnit>(selfScene,accountId, true, true);
|
||||
mailUnit.Name = unitName;
|
||||
mailUnit.AccountId = accountId;
|
||||
mailUnit.CreateTime = TimeHelper.Now;
|
||||
// 把创建好的实体添加到缓存中,方便后面使用。
|
||||
self.UnitByAccountId.Add(accountId, mailUnit);
|
||||
self.UnitByName.Add(unitName,mailUnit);
|
||||
Log.Debug($"用户不存在行需要创建 Name:{unitName} mailUnit:{mailUnit.RuntimeId}");
|
||||
}
|
||||
// 设置GateRouteId
|
||||
mailUnit.GateRouteId = gateRouteId;
|
||||
// 设置MailComponent
|
||||
if (mailUnit.GetComponent<MailComponent>() == null)
|
||||
{
|
||||
// 数据库中查询这个组件是否存在。
|
||||
var mailComponent = await selfScene.World.DataBase.Query<MailComponent>(mailUnit.Id, true);
|
||||
if (mailComponent == null)
|
||||
{
|
||||
// MailUnit没有这个MailComponent组件,就给添加一个新的组件。
|
||||
mailUnit.AddComponent<MailComponent>();
|
||||
}
|
||||
else
|
||||
{
|
||||
mailUnit.AddComponent(mailComponent);
|
||||
}
|
||||
}
|
||||
// 可选,如果你不需要保存到数据库,那么可以忽略下面的代码。
|
||||
await selfScene.World.DataBase.Save(mailUnit);
|
||||
// 领取下离线的邮件。如果有的情况下。
|
||||
await selfScene.GetComponent<MailBoxManageComponent>().GetHaveMail(mailUnit, true);
|
||||
// 把用户添加到在线的列表
|
||||
self.Online.Add(mailUnit.Id, mailUnit);
|
||||
// 返回MailUnit实体。
|
||||
return mailUnit;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 退出登录逻辑,会自动保存数据。
|
||||
/// </summary>
|
||||
/// <param name="self"></param>
|
||||
/// <param name="mailUnit"></param>
|
||||
public static async FTask Exit(this MailUnitManageComponent self, MailUnit mailUnit)
|
||||
{
|
||||
var mailComponent = mailUnit.GetComponent<MailComponent>();
|
||||
if (mailComponent == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 保存mailComponent到数据库中。
|
||||
await self.Scene.World.DataBase.Save(mailComponent);
|
||||
// 移除这个组件。
|
||||
mailUnit.RemoveComponent<MailComponent>();
|
||||
// 在在线列表的容器中,移除这个MailUnit实体。
|
||||
self.Online.Remove(mailUnit.Id);
|
||||
Log.Debug($"AccountId:{mailUnit.AccountId} Name:{mailUnit.Name} Exit!");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据UnitName获取MailUnit实体
|
||||
/// </summary>
|
||||
/// <param name="self"></param>
|
||||
/// <param name="unitName"></param>
|
||||
/// <param name="mailUnit"></param>
|
||||
/// <returns></returns>
|
||||
public static bool TryGet(this MailUnitManageComponent self, string unitName, out MailUnit mailUnit)
|
||||
{
|
||||
return self.UnitByName.TryGetValue(unitName, out mailUnit);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 根据AccountId获取MailUnit实体
|
||||
/// </summary>
|
||||
/// <param name="self"></param>
|
||||
/// <param name="accountId"></param>
|
||||
/// <param name="mailUnit"></param>
|
||||
/// <returns></returns>
|
||||
public static bool TryGet(this MailUnitManageComponent self, long accountId, out MailUnit mailUnit)
|
||||
{
|
||||
return self.UnitByAccountId.TryGetValue(accountId, out mailUnit);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除MailUnit实体。
|
||||
/// </summary>
|
||||
/// <param name="self"></param>
|
||||
/// <param name="accountId"></param>
|
||||
/// <returns></returns>
|
||||
public static async FTask<uint> Remove(this MailUnitManageComponent self, long accountId)
|
||||
{
|
||||
// if (!self.UnitByAccountId.TryGetValue(accountId, out var mailUnit))
|
||||
// {
|
||||
// // 这个1代表的是没有找到对应的MailUnit
|
||||
// return 1;
|
||||
// }
|
||||
|
||||
if (!self.UnitByAccountId.Remove(accountId, out var mailUnit))
|
||||
{
|
||||
// 这个1代表的是没有找到对应的MailUnit
|
||||
return 1;
|
||||
}
|
||||
|
||||
self.UnitByName.Remove(mailUnit.Name);
|
||||
// 在数据库中删除MailUnit实体
|
||||
await self.Scene.World.DataBase.Remove<MailUnit>(mailUnit.Id);
|
||||
// 销毁这个MailUnit
|
||||
mailUnit.Dispose();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
22
邮件系统课程完整代码/Server/Hotfix/Mail/Entity/MailBoxSystem.cs
Normal file
22
邮件系统课程完整代码/Server/Hotfix/Mail/Entity/MailBoxSystem.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
using Fantasy.Entitas.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class MailBoxDestroySystem : DestroySystem<MailBox>
|
||||
{
|
||||
protected override void Destroy(MailBox self)
|
||||
{
|
||||
if (self.Mail != null)
|
||||
{
|
||||
self.Mail.Dispose();
|
||||
self.Mail = null;
|
||||
}
|
||||
|
||||
self.MailBoxType = MailBoxType.None;
|
||||
self.CreateTime = 0;
|
||||
self.ExpireTime = 0;
|
||||
self.SendAccountId = 0;
|
||||
self.AccountId.Clear();
|
||||
self.Received.Clear();
|
||||
}
|
||||
}
|
||||
69
邮件系统课程完整代码/Server/Hotfix/Mail/Entity/MailSystem.cs
Normal file
69
邮件系统课程完整代码/Server/Hotfix/Mail/Entity/MailSystem.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using Fantasy.Entitas.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class MailDestroySystem : DestroySystem<Mail>
|
||||
{
|
||||
protected override void Destroy(Mail self)
|
||||
{
|
||||
self.OwnerId = 0;
|
||||
self.Title = null;
|
||||
self.Content = null;
|
||||
self.CreateTime = 0;
|
||||
self.ExpireTime = 0;
|
||||
self.Money = 0;
|
||||
self.MailState = MailState.None;
|
||||
self.MailType = MailType.None;
|
||||
|
||||
foreach (var selfItem in self.Items)
|
||||
{
|
||||
selfItem.Dispose();
|
||||
}
|
||||
|
||||
self.Items.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public static class MailSystem
|
||||
{
|
||||
public static MailSimplifyInfo ToMailSimplifyInfo(this Mail self)
|
||||
{
|
||||
return new MailSimplifyInfo()
|
||||
{
|
||||
MailId = self.Id,
|
||||
OwnerId = self.OwnerId,
|
||||
Title = self.Title,
|
||||
Content = self.Content,
|
||||
CreateTime = self.CreateTime,
|
||||
ExpireTime = self.ExpireTime,
|
||||
MailState = (int)self.MailState,
|
||||
MailType = (int)self.MailType
|
||||
};
|
||||
}
|
||||
|
||||
public static MailInfo ToMailInfo(this Mail self)
|
||||
{
|
||||
var mailInfo = new MailInfo()
|
||||
{
|
||||
MailId = self.Id,
|
||||
OwnerId = self.OwnerId,
|
||||
Title = self.Title,
|
||||
Content = self.Content,
|
||||
CreateTime = self.CreateTime,
|
||||
ExpireTime = self.ExpireTime,
|
||||
Money = self.Money,
|
||||
MailState = (int)self.MailState,
|
||||
MailType = (int)self.MailType
|
||||
};
|
||||
|
||||
foreach (var selfItem in self.Items)
|
||||
{
|
||||
mailInfo.Items.Add(new ItemInfo()
|
||||
{
|
||||
Name = selfItem.Name,
|
||||
});
|
||||
}
|
||||
|
||||
return mailInfo;
|
||||
}
|
||||
}
|
||||
14
邮件系统课程完整代码/Server/Hotfix/Mail/Entity/MailUnitSystem.cs
Normal file
14
邮件系统课程完整代码/Server/Hotfix/Mail/Entity/MailUnitSystem.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using Fantasy.Entitas.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class MailUnitDestroySystem: DestroySystem<MailUnit>
|
||||
{
|
||||
protected override void Destroy(MailUnit self)
|
||||
{
|
||||
self.Name = null;
|
||||
self.AccountId = 0;
|
||||
self.CreateTime = 0;
|
||||
self.GateRouteId = 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class Other2Mail_SendRequestHandler : RouteRPC<Scene, Other2Mail_SendMailRequest, Mail2Other_SendMailResponse>
|
||||
{
|
||||
protected override async FTask Run(Scene scene, Other2Mail_SendMailRequest request, Mail2Other_SendMailResponse response, Action reply)
|
||||
{
|
||||
await MailHelper.Send(scene, request.MailBox);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class C2Mail_GetHaveMailRequestHandler : RouteRPC<MailUnit, C2Mail_GetHaveMailRequest, Mail2C_GetHaveMailResposne>
|
||||
{
|
||||
protected override async FTask Run(MailUnit mailUnit, C2Mail_GetHaveMailRequest request, Mail2C_GetHaveMailResposne response, Action reply)
|
||||
{
|
||||
var mailComponent = mailUnit.GetComponent<MailComponent>();
|
||||
|
||||
// 这个mailComponent是不是可能会为空?答案是可能的。
|
||||
// 那如果是空的怎么办呢,这样情况只能是别人恶意发包了。
|
||||
|
||||
if (mailComponent == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
// 检查是否有超时的邮件。如果有那就清楚掉
|
||||
await mailComponent.CheckTimeOut();
|
||||
// 领取当前的邮件
|
||||
mailComponent.GetMailSimplifyInfos(response.Mails);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class C2Mail_OpenMailRequestHandler : RouteRPC<MailUnit, C2Mail_OpenMailRequest, Mail2C_OpenMailResposne>
|
||||
{
|
||||
protected override async FTask Run(MailUnit mailUnit, C2Mail_OpenMailRequest request, Mail2C_OpenMailResposne response, Action reply)
|
||||
{
|
||||
if (request.MailId <= 0)
|
||||
{
|
||||
response.ErrorCode = 100;
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据这个MailId来拿到邮件的详细信息
|
||||
var (errorCode, mail) = await mailUnit.GetComponent<MailComponent>().OpenMail(request.MailId);
|
||||
|
||||
if (errorCode != 0)
|
||||
{
|
||||
response.ErrorCode = errorCode;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!request.ReturnMailInfo)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
response.MailInfo = mail.ToMailInfo();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class C2Mail_ReceiveMailRequestHandler : RouteRPC<MailUnit, C2Mail_ReceiveMailRequest, Mail2C_ReceiveMailResponse>
|
||||
{
|
||||
protected override async FTask Run(MailUnit mailUnit, C2Mail_ReceiveMailRequest request, Mail2C_ReceiveMailResponse response, Action reply)
|
||||
{
|
||||
if (request.MailId <= 0)
|
||||
{
|
||||
response.ErrorCode = 100;
|
||||
return;
|
||||
}
|
||||
|
||||
response.ErrorCode = await mailUnit.GetComponent<MailComponent>()
|
||||
.Receive(request.MailId, request.Money, request.ItemId, true);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class C2Mail_RemoveMailRequestHandler : RouteRPC<MailUnit,C2Mail_RemoveMailRequest, Mail2C_RemoveMailResponse>
|
||||
{
|
||||
protected override async FTask Run(MailUnit mailUnit, C2Mail_RemoveMailRequest request, Mail2C_RemoveMailResponse response, Action reply)
|
||||
{
|
||||
if (request.MailId <= 0)
|
||||
{
|
||||
// 这里的1代表MailId不正确。
|
||||
response.ErrorCode = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
response.ErrorCode = await mailUnit.GetComponent<MailComponent>()
|
||||
.Remove(request.MailId, MailRemoveActionType.Remove, true);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.DataStructure.Collection;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class C2Mail_SendMailRequestHandler : RouteRPC<MailUnit, C2Mail_SendMailRequest, Mail2C_SendMailResponse>
|
||||
{
|
||||
protected override async FTask Run(MailUnit mailUnit, C2Mail_SendMailRequest request, Mail2C_SendMailResponse response, Action reply)
|
||||
{
|
||||
if (string.IsNullOrEmpty(request.UserName))
|
||||
{
|
||||
// 这里的1代表的是发送的接收玩家名字不正确。
|
||||
response.ErrorCode = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(request.Title) || string.IsNullOrEmpty(request.Content))
|
||||
{
|
||||
// 这里的2代表的是发送的邮件标题或者内容不正确。
|
||||
response.ErrorCode = 2;
|
||||
return;
|
||||
}
|
||||
|
||||
if (request.ItemId.Count > 10)
|
||||
{
|
||||
// 这里的3代表的是发送的邮件附件超出了最大范围。
|
||||
response.ErrorCode = 3;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mailUnit.Scene.GetComponent<MailUnitManageComponent>().TryGet(request.UserName, out var receiveMailUnit))
|
||||
{
|
||||
// 这里的4代表的是没有该玩家。
|
||||
response.ErrorCode = 4;
|
||||
return;
|
||||
}
|
||||
|
||||
if (request.Money > 0)
|
||||
{
|
||||
// 如果大于0,就要调用某一个接口去货币所在的服务器上面去扣除玩家的钱。
|
||||
// var moneyResposne = await MoneyHelper.Cost(mailUnit.Scene, request.Money);
|
||||
// if (moneyResposne.ErrorCode != 0)
|
||||
// {
|
||||
// response.ErrorCode = moneyResposne.ErrorCode;
|
||||
// return;
|
||||
// }
|
||||
}
|
||||
|
||||
using var mailItems = ListPool<Item>.Create();
|
||||
if (request.ItemId.Count > 0)
|
||||
{
|
||||
// var itemResposne = await BagHelper.Get(mailUnit.Scene, request.ItemId);
|
||||
// if (itemResposne.ErrorCode != 0)
|
||||
// {
|
||||
// response.ErrorCode = itemResposne.ErrorCode;
|
||||
// return;
|
||||
// }
|
||||
// mailItems.AddRange(itemResposne.Items);
|
||||
}
|
||||
|
||||
var accountId = ListPool<long>.Create(receiveMailUnit.AccountId);
|
||||
var mail = MailFactory.Create(mailUnit.Scene, MailType.User, request.Title, request.Content, request.Money, mailItems);
|
||||
var mailBox = MailBoxFactory.Create(mailUnit.Scene, MailBoxType.Specify, mailUnit.AccountId, mail, 1000 * 60 * 60, accountId);
|
||||
await MailHelper.Send(mailUnit.Scene, mailBox);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.DataStructure.Collection;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class C2Mail_TestRequestHandler : RouteRPC<MailUnit, C2Mail_TestRequest, Mail2C_TestResponse>
|
||||
{
|
||||
protected override async FTask Run(MailUnit mailUnit, C2Mail_TestRequest request, Mail2C_TestResponse response, Action reply)
|
||||
{
|
||||
Log.Debug($"这是一个测试的自定义消息协议 Tag:{mailUnit.Name}");
|
||||
response.Tag = "666";
|
||||
// using var accountId = ListPool<long>.Create(65491190472245249);
|
||||
var mail = MailFactory.Create(mailUnit.Scene, MailType.System, "测试所有人指定日期玩家邮件", "测试所有人指定日期玩家邮件内容", 9991);
|
||||
var mailBox = MailBoxFactory.Create(mailUnit.Scene, MailBoxType.AllToDate, mailUnit.AccountId, mail,
|
||||
1000 * 60 * 60);
|
||||
await MailHelper.Send(mailUnit.Scene, mailBox);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public class G2Mail_ExitRequestHandler : RouteRPC<MailUnit, G2Mail_ExitRequest, Mail2G_ExitResponse>
|
||||
{
|
||||
protected override async FTask Run(MailUnit mailUnit, G2Mail_ExitRequest request, Mail2G_ExitResponse response, Action reply)
|
||||
{
|
||||
await mailUnit.Scene.GetComponent<MailUnitManageComponent>().Exit(mailUnit);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Entitas;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class G2Mail_LoginRequestHandler : RouteRPC<Scene, G2Mail_LoginRequest, Mail2G_LoginResponse>
|
||||
{
|
||||
protected override async FTask Run(Scene scene, G2Mail_LoginRequest request, Mail2G_LoginResponse response, Action reply)
|
||||
{
|
||||
// Scene也是继承Entity
|
||||
// 只要能知道Entity的RuntimeId,就可以通过这个RuntimeId发送消息了。
|
||||
// 并且接收消息的Handler,第一个参数的实体可以变成这个Entity的实体
|
||||
// 也可以理解为这个RuntimeId其实就是RouteId
|
||||
|
||||
// var mailUnit = Entity.Create<MailUnit>(scene, request.AccountId, true, true);
|
||||
// mailUnit.Name = request.Name;
|
||||
// Log.Debug($"SceneType:{scene.SceneType} Name:{request.Name} mailUnit:{mailUnit.RuntimeId}");
|
||||
// response.MailUnitRouteId = mailUnit.RuntimeId;
|
||||
|
||||
var mailUnit = await scene.GetComponent<MailUnitManageComponent>()
|
||||
.Online(request.AccountId, request.Name, request.GateRouteId);
|
||||
response.MailUnitRouteId = mailUnit.RuntimeId;
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class G2Mail_TestMessageHandler : Route<MailUnit,G2Mail_TestMessage>
|
||||
{
|
||||
protected override async FTask Run(MailUnit mailUnit, G2Mail_TestMessage message)
|
||||
{
|
||||
Log.Debug($"这是一个测试的消息协议 Tag:{mailUnit.Name}");
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
62
邮件系统课程完整代码/Server/Hotfix/Mail/Helper/MailBoxFactory.cs
Normal file
62
邮件系统课程完整代码/Server/Hotfix/Mail/Helper/MailBoxFactory.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using Fantasy.Entitas;
|
||||
using Fantasy.Helper;
|
||||
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public static class MailBoxFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// 创建一个邮件箱
|
||||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="mailBoxType"></param>
|
||||
/// <param name="sendAccountId"></param>
|
||||
/// <param name="mail"></param>
|
||||
/// <param name="expireTime"></param>
|
||||
/// <param name="accountId"></param>
|
||||
/// <returns></returns>
|
||||
public static MailBox Create(Scene scene, MailBoxType mailBoxType, long sendAccountId, Mail mail, int expireTime, List<long> accountId = null)
|
||||
{
|
||||
var mailBox = Entity.Create<MailBox>(scene, true, true);
|
||||
mailBox.SendAccountId = sendAccountId;
|
||||
mailBox.Mail = mail;
|
||||
mailBox.MailBoxType = mailBoxType;
|
||||
mailBox.CreateTime = TimeHelper.Now;
|
||||
mailBox.ExpireTime = mailBox.CreateTime + expireTime;
|
||||
|
||||
if (accountId == null || accountId.Count <= 0)
|
||||
{
|
||||
return mailBox;
|
||||
}
|
||||
|
||||
foreach (var raId in accountId)
|
||||
{
|
||||
mailBox.AccountId.Add(raId);
|
||||
}
|
||||
|
||||
return mailBox;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建一个邮件箱
|
||||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="mailType"></param>
|
||||
/// <param name="mailBoxType"></param>
|
||||
/// <param name="title"></param>
|
||||
/// <param name="content"></param>
|
||||
/// <param name="money"></param>
|
||||
/// <param name="items"></param>
|
||||
/// <param name="sendAccountId"></param>
|
||||
/// <param name="expireTime"></param>
|
||||
/// <param name="accountId"></param>
|
||||
/// <returns></returns>
|
||||
public static MailBox Create(Scene scene, MailType mailType, MailBoxType mailBoxType, string title, string content, int money, List<Item> items,
|
||||
long sendAccountId, int expireTime, List<long> accountId = null)
|
||||
{
|
||||
var mail = MailFactory.Create(scene, mailType,title, content, money, items);
|
||||
return Create(scene, mailBoxType, sendAccountId, mail, expireTime, accountId);
|
||||
}
|
||||
}
|
||||
47
邮件系统课程完整代码/Server/Hotfix/Mail/Helper/MailFactory.cs
Normal file
47
邮件系统课程完整代码/Server/Hotfix/Mail/Helper/MailFactory.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using Fantasy.Entitas;
|
||||
using Fantasy.Serialize;
|
||||
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public static class MailFactory
|
||||
{
|
||||
public static readonly ISerialize Serializer = SerializerManager.GetSerializer(FantasySerializerType.Bson);
|
||||
|
||||
/// <summary>
|
||||
/// 创建一个基础的邮件
|
||||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="title"></param>
|
||||
/// <param name="content"></param>
|
||||
/// <param name="money"></param>
|
||||
/// <param name="items"></param>
|
||||
/// <param name="mailType"></param>
|
||||
/// <returns></returns>
|
||||
public static Mail Create(Scene scene, MailType mailType, string title, string content, int money = 0, List<Item> items = null)
|
||||
{
|
||||
var mail = Entity.Create<Mail>(scene, true, true);
|
||||
mail.Title = title;
|
||||
mail.Content = content;
|
||||
mail.Money = money;
|
||||
mail.MailType = mailType;
|
||||
mail.MailState = MailState.Unread;
|
||||
|
||||
// if (items is not { Count: > 0 })
|
||||
// {
|
||||
//
|
||||
// }
|
||||
if (items != null && items.Count > 0)
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
// 最好的是要个这个Item给克隆出一份来。
|
||||
// 这样就可以保证,无论外面怎么改变也不会影响这个邮件的东西了。
|
||||
var cloneItem = Serializer.Clone(item);
|
||||
mail.Items.Add(cloneItem);
|
||||
}
|
||||
}
|
||||
|
||||
return mail;
|
||||
}
|
||||
}
|
||||
193
邮件系统课程完整代码/Server/Hotfix/Mail/Helper/MailHelper.cs
Normal file
193
邮件系统课程完整代码/Server/Hotfix/Mail/Helper/MailHelper.cs
Normal file
@@ -0,0 +1,193 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.DataStructure.Collection;
|
||||
using Fantasy.Platform.Net;
|
||||
|
||||
// ReSharper disable ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
/// <summary>
|
||||
/// 发送邮件的唯一接口
|
||||
/// 如果不是通过这个接口发送的邮件、出现任何问题,后果自负
|
||||
/// </summary>
|
||||
public static class MailHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// 发送邮件
|
||||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="mailBox">发送完成后,记着一定要销毁这个MailBox,不然会有GC。</param>
|
||||
public static async FTask Send(Scene scene, MailBox mailBox)
|
||||
{
|
||||
if (scene.SceneType == SceneType.Mail)
|
||||
{
|
||||
await InnerSend(scene, mailBox);
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果不在同一个Scene下,就需要发送内部的网络消息给这个Scene了
|
||||
var mailSceneConfig = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Mail)[0];
|
||||
await scene.NetworkMessagingComponent.CallInnerRoute(mailSceneConfig.RouteId, new Other2Mail_SendMailRequest()
|
||||
{
|
||||
MailBox = mailBox
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发送邮件
|
||||
/// </summary>
|
||||
/// <param name="scene"></param>
|
||||
/// <param name="mailBox"></param>
|
||||
/// <returns></returns>
|
||||
private static async FTask InnerSend(Scene scene, MailBox mailBox)
|
||||
{
|
||||
// 现在的情况,这个接口只能是在Mail这个服务器下可以操作
|
||||
// 但是真实的情况,其他同时开发的逻辑,调用这个接口一般都是在其他的服务器。
|
||||
// 这个问题其实很好解决,只需要判定当前Scene不是Mail、那就做一个协议,自动发送到这个MailScene就可以了。
|
||||
|
||||
if (mailBox.MailBoxType == MailBoxType.None)
|
||||
{
|
||||
Log.Error("MailBoxType MailBoxType.None not support!");
|
||||
return;
|
||||
}
|
||||
|
||||
var mailUnitManageComponent = scene.GetComponent<MailUnitManageComponent>();
|
||||
var mailBoxManageComponent = scene.GetComponent<MailBoxManageComponent>();
|
||||
mailBoxManageComponent.MailBoxes.Add(mailBox.Id, mailBox);
|
||||
|
||||
switch (mailBox.MailBoxType)
|
||||
{
|
||||
case MailBoxType.Specify:
|
||||
{
|
||||
if (mailBox.AccountId.Count <= 0)
|
||||
{
|
||||
Log.Error($"{mailBox.Id} AccountId is 0!");
|
||||
return;
|
||||
}
|
||||
|
||||
// 这里可能有几种情况
|
||||
// 1、AccountId里面可能只有一个人。
|
||||
// 2、AccountId里面有多个人。
|
||||
|
||||
using var sendAccountIds = ListPool<long>.Create();
|
||||
|
||||
foreach (var accountId in mailBox.AccountId)
|
||||
{
|
||||
if (!mailUnitManageComponent.TryGet(accountId, out var mailUnit))
|
||||
{
|
||||
// 如果没有的话,代表这个用户根本不存在。
|
||||
// 那这样的情况就不需要做任何处理。
|
||||
continue;
|
||||
}
|
||||
|
||||
// 如果有的话,那么就给这个用户发送邮件。
|
||||
// 这个玩家是否在线?
|
||||
var mailComponent = mailUnit.GetComponent<MailComponent>();
|
||||
// 在线的话,就直接发送邮件给这个玩家就可以了。
|
||||
if (mailComponent != null)
|
||||
{
|
||||
await mailComponent.Add(MailFactory.Serializer.Clone(mailBox.Mail), true);
|
||||
sendAccountIds.Add(accountId);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 不在线
|
||||
// 首先
|
||||
// 1、如果玩家不在线,那就把这个邮件在数据库中拿出来,然后把邮件插入到玩家的邮件列表里。然后再保存
|
||||
// 这样的做法是不推荐的,因为咱们游戏所有的东西都是有状态的,但是你拿出来的邮件是没有状态的。这样可能会导致一些问题的出现。
|
||||
// 正确的做做法:
|
||||
// 把这个邮件方法一个地方,比如是一个处理中心,当玩家上线的时候,主动去这个中心领取这个邮件。
|
||||
// 快递驿站、菜鸟、
|
||||
mailBoxManageComponent.MailsByAccount.Add(accountId, mailBox);
|
||||
Log.Debug("发送离线邮件成功,用户上线第一时间会领取这个邮件。");
|
||||
}
|
||||
}
|
||||
|
||||
// 移除掉发送成功的账号。
|
||||
|
||||
foreach (var sendAccountId in sendAccountIds)
|
||||
{
|
||||
mailBox.AccountId.Remove(sendAccountId);
|
||||
}
|
||||
|
||||
// 如果没有任何收件人了、就可以把这个邮箱给删除了。
|
||||
|
||||
if (mailBox.AccountId.Count <= 0)
|
||||
{
|
||||
mailBox.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
// 当这个邮件箱还有没有接收的玩家时候,要保存到数据库中,方便下次停服维护再重新启动的时候,加载这个邮件箱。
|
||||
await scene.World.DataBase.Save(mailBox);
|
||||
Log.Debug("保存离线邮件成功");
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case MailBoxType.Online:
|
||||
{
|
||||
// // 这里有个问题,如何知道在线的人呢?
|
||||
// foreach (var (_, mailUnit) in mailUnitManageComponent.UnitByAccountId)
|
||||
// {
|
||||
// var mailComponent = mailUnit.GetComponent<MailComponent>();
|
||||
// if (mailComponent == null)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
// // 能指定到这里的都是在线的玩家。
|
||||
// await mailComponent.Add(MailFactory.Serializer.Clone(mailBox.Mail), true);
|
||||
// }
|
||||
try
|
||||
{
|
||||
foreach (var (_, mailUnit) in mailUnitManageComponent.Online)
|
||||
{
|
||||
await mailUnit.GetComponent<MailComponent>().Add(MailFactory.Serializer.Clone(mailBox.Mail), true);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
mailBox.Dispose();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case MailBoxType.All:
|
||||
{
|
||||
// 要保证这个邮件一定要有一个生命周期。并且这个周期一定要短,如果是想要实现永久的,可以比如30天发送一次。
|
||||
mailBoxManageComponent.MailsByMailBoxType.Add((int)MailBoxType.All, mailBox);
|
||||
// 首先给所有在线的玩家发送。
|
||||
foreach (var (_, mailUnit) in mailUnitManageComponent.Online)
|
||||
{
|
||||
await mailUnit.GetComponent<MailComponent>().Add(MailFactory.Serializer.Clone(mailBox.Mail), true);
|
||||
// 在邮件盒子中记录下玩家领取的记录,避免重复领取。
|
||||
mailBox.Received.Add(mailUnit.Id);
|
||||
}
|
||||
// 保存邮件箱到数据库。
|
||||
await scene.World.DataBase.Save(mailBox);
|
||||
break;
|
||||
}
|
||||
case MailBoxType.AllToDate:
|
||||
{
|
||||
mailBoxManageComponent.MailsByMailBoxType.Add((int)MailBoxType.AllToDate, mailBox);
|
||||
foreach (var (_, mailUnit) in mailUnitManageComponent.Online)
|
||||
{
|
||||
if (mailUnit.CreateTime > mailBox.CreateTime)
|
||||
{
|
||||
// 如果执行到这里,表示这里用户是这个邮件创建之后的用户。这个就不要发送了
|
||||
continue;
|
||||
}
|
||||
|
||||
// 所以这个邮件类型的逻辑就是,给当前邮件创建时间之前的玩家发送。
|
||||
await mailUnit.GetComponent<MailComponent>().Add(MailFactory.Serializer.Clone(mailBox.Mail), true);
|
||||
// 在邮件盒子中记录下玩家领取的记录,避免重复领取。
|
||||
mailBox.Received.Add(mailUnit.Id);
|
||||
}
|
||||
// 保存邮件箱到数据库。
|
||||
await scene.World.DataBase.Save(mailBox);
|
||||
break;
|
||||
}
|
||||
// 根据玩家等级、等等这样的邮件箱类型,都可以自行扩展了
|
||||
// 课下作业、自己实现一个起来类型的邮箱。
|
||||
}
|
||||
}
|
||||
}
|
||||
24
邮件系统课程完整代码/Server/Hotfix/OnCreateScene_Init.cs
Normal file
24
邮件系统课程完整代码/Server/Hotfix/OnCreateScene_Init.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Event;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class OnCreateScene_Init : AsyncEventSystem<OnCreateScene>
|
||||
{
|
||||
protected override async FTask Handler(OnCreateScene self)
|
||||
{
|
||||
var scene = self.Scene;
|
||||
|
||||
switch (scene.SceneType)
|
||||
{
|
||||
case SceneType.Mail:
|
||||
{
|
||||
// 离线邮件箱管理组件。
|
||||
await scene.AddComponent<MailBoxManageComponent>().Init();
|
||||
// 邮件的用户信息管理组件。
|
||||
await scene.AddComponent<MailUnitManageComponent>().Init();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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.
334
邮件系统课程完整代码/Server/Hotfix/bin/Debug/net8.0/Hotfix.deps.json
Normal file
334
邮件系统课程完整代码/Server/Hotfix/bin/Debug/net8.0/Hotfix.deps.json
Normal file
@@ -0,0 +1,334 @@
|
||||
{
|
||||
"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.2.22": {
|
||||
"dependencies": {
|
||||
"CommandLineParser": "2.9.1",
|
||||
"MongoDB.Bson": "3.1.0",
|
||||
"MongoDB.Driver": "3.1.0",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"System.IO.Pipelines": "9.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.1.0": {
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.5",
|
||||
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/MongoDB.Bson.dll": {
|
||||
"assemblyVersion": "3.1.0.0",
|
||||
"fileVersion": "3.1.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"MongoDB.Driver/3.1.0": {
|
||||
"dependencies": {
|
||||
"DnsClient": "1.6.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "2.0.0",
|
||||
"MongoDB.Bson": "3.1.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.1.0.0",
|
||||
"fileVersion": "3.1.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/9.0.0": {
|
||||
"runtime": {
|
||||
"lib/net8.0/System.IO.Pipelines.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.24.52809"
|
||||
}
|
||||
}
|
||||
},
|
||||
"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.2.22"
|
||||
},
|
||||
"runtime": {
|
||||
"Entity.dll": {
|
||||
"assemblyVersion": "1.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"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.2.22": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-cT6B0YJ5JmbPHBLYgLeVgg2WbXYxxa1tudoIase88uMzAuqU9t7EQ7dFZGSWjP41c5JOQ/0f1q9lzGWTh/hskw==",
|
||||
"path": "fantasy-net/2024.2.22",
|
||||
"hashPath": "fantasy-net.2024.2.22.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.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3dhaZhz18B5vUoEP13o2j8A6zQfkHdZhwBvLZEjDJum4BTLLv1/Z8bt25UQEtpqvYwLgde4R6ekWZ7XAYUMxuw==",
|
||||
"path": "mongodb.bson/3.1.0",
|
||||
"hashPath": "mongodb.bson.3.1.0.nupkg.sha512"
|
||||
},
|
||||
"MongoDB.Driver/3.1.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-+O7lKaIl7VUHptE0hqTd7UY1G5KDp/o8S4upG7YL4uChMNKD/U6tz9i17nMGHaD/L2AiPLgaJcaDe2XACsegGA==",
|
||||
"path": "mongodb.driver/3.1.0",
|
||||
"hashPath": "mongodb.driver.3.1.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/9.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-eA3cinogwaNB4jdjQHOP3Z3EuyiDII7MT35jgtnsA4vkn0LUrrSHsU0nzHTzFzmaFYeKV7MYyMxOocFzsBHpTw==",
|
||||
"path": "system.io.pipelines/9.0.0",
|
||||
"hashPath": "system.io.pipelines.9.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/Movies/邮件系统/Lession/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 @@
|
||||
be5105afde1a71cd525a8ea82816450929933f775a7199cdb8dd8fa966b6d325
|
||||
@@ -0,0 +1,15 @@
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/bin/Debug/net8.0/Hotfix.deps.json
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/bin/Debug/net8.0/Hotfix.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/bin/Debug/net8.0/Hotfix.pdb
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/bin/Debug/net8.0/Entity.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/bin/Debug/net8.0/Entity.pdb
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/Hotfix.csproj.AssemblyReference.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/Hotfix.GeneratedMSBuildEditorConfig.editorconfig
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/Hotfix.AssemblyInfoInputs.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/Hotfix.AssemblyInfo.cs
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/Hotfix.csproj.CoreCompileInputs.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/Hotfix.csproj.Up2Date
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/Hotfix.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/refint/Hotfix.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/Debug/net8.0/Hotfix.pdb
|
||||
/Users/fantasy/Movies/邮件系统/Lession/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.
138
邮件系统课程完整代码/Server/Hotfix/obj/Hotfix.csproj.nuget.dgspec.json
Normal file
138
邮件系统课程完整代码/Server/Hotfix/obj/Hotfix.csproj.nuget.dgspec.json
Normal file
@@ -0,0 +1,138 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj",
|
||||
"projectName": "Entity",
|
||||
"projectPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj",
|
||||
"packagesPath": "/Users/fantasy/.nuget/packages/",
|
||||
"outputPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"/Users/fantasy/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net8.0"
|
||||
],
|
||||
"sources": {
|
||||
"/usr/local/share/dotnet/library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "all"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.100"
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"dependencies": {
|
||||
"Fantasy-Net": {
|
||||
"target": "Package",
|
||||
"version": "[2024.2.22, )"
|
||||
}
|
||||
},
|
||||
"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/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj",
|
||||
"projectName": "Hotfix",
|
||||
"projectPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj",
|
||||
"packagesPath": "/Users/fantasy/.nuget/packages/",
|
||||
"outputPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"/Users/fantasy/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net8.0"
|
||||
],
|
||||
"sources": {
|
||||
"/usr/local/share/dotnet/library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"projectReferences": {
|
||||
"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj": {
|
||||
"projectPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "all"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.100"
|
||||
},
|
||||
"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.2</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="/Users/fantasy/.nuget/packages/" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -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.2.22/buildTransitive/Fantasy-Net.targets" Condition="Exists('$(NuGetPackageRoot)fantasy-net/2024.2.22/buildTransitive/Fantasy-Net.targets')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
966
邮件系统课程完整代码/Server/Hotfix/obj/project.assets.json
Normal file
966
邮件系统课程完整代码/Server/Hotfix/obj/project.assets.json
Normal file
@@ -0,0 +1,966 @@
|
||||
{
|
||||
"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.2.22": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"CommandLineParser": "2.9.1",
|
||||
"MongoDB.Bson": "3.1.0",
|
||||
"MongoDB.Driver": "3.1.0",
|
||||
"Newtonsoft.Json": "13.0.3",
|
||||
"System.IO.Pipelines": "9.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.1.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.1.0": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
"DnsClient": "1.6.1",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "2.0.0",
|
||||
"MongoDB.Bson": "3.1.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/9.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/net8.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.2.22"
|
||||
},
|
||||
"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.2.22": {
|
||||
"sha512": "cT6B0YJ5JmbPHBLYgLeVgg2WbXYxxa1tudoIase88uMzAuqU9t7EQ7dFZGSWjP41c5JOQ/0f1q9lzGWTh/hskw==",
|
||||
"type": "package",
|
||||
"path": "fantasy-net/2024.2.22",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"LICENSE",
|
||||
"README.md",
|
||||
"buildTransitive/Fantasy-Net.targets",
|
||||
"fantasy-net.2024.2.22.nupkg.sha512",
|
||||
"fantasy-net.nuspec",
|
||||
"icon.png",
|
||||
"lib/net8.0/Fantasy-Net.dll",
|
||||
"lib/net9.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.1.0": {
|
||||
"sha512": "3dhaZhz18B5vUoEP13o2j8A6zQfkHdZhwBvLZEjDJum4BTLLv1/Z8bt25UQEtpqvYwLgde4R6ekWZ7XAYUMxuw==",
|
||||
"type": "package",
|
||||
"path": "mongodb.bson/3.1.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.1.0.nupkg.sha512",
|
||||
"mongodb.bson.nuspec",
|
||||
"packageIcon.png"
|
||||
]
|
||||
},
|
||||
"MongoDB.Driver/3.1.0": {
|
||||
"sha512": "+O7lKaIl7VUHptE0hqTd7UY1G5KDp/o8S4upG7YL4uChMNKD/U6tz9i17nMGHaD/L2AiPLgaJcaDe2XACsegGA==",
|
||||
"type": "package",
|
||||
"path": "mongodb.driver/3.1.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.1.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/9.0.0": {
|
||||
"sha512": "eA3cinogwaNB4jdjQHOP3Z3EuyiDII7MT35jgtnsA4vkn0LUrrSHsU0nzHTzFzmaFYeKV7MYyMxOocFzsBHpTw==",
|
||||
"type": "package",
|
||||
"path": "system.io.pipelines/9.0.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"Icon.png",
|
||||
"LICENSE.TXT",
|
||||
"PACKAGE.md",
|
||||
"THIRD-PARTY-NOTICES.TXT",
|
||||
"buildTransitive/net461/System.IO.Pipelines.targets",
|
||||
"buildTransitive/net462/_._",
|
||||
"buildTransitive/net8.0/_._",
|
||||
"buildTransitive/netcoreapp2.0/System.IO.Pipelines.targets",
|
||||
"lib/net462/System.IO.Pipelines.dll",
|
||||
"lib/net462/System.IO.Pipelines.xml",
|
||||
"lib/net8.0/System.IO.Pipelines.dll",
|
||||
"lib/net8.0/System.IO.Pipelines.xml",
|
||||
"lib/net9.0/System.IO.Pipelines.dll",
|
||||
"lib/net9.0/System.IO.Pipelines.xml",
|
||||
"lib/netstandard2.0/System.IO.Pipelines.dll",
|
||||
"lib/netstandard2.0/System.IO.Pipelines.xml",
|
||||
"system.io.pipelines.9.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/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj",
|
||||
"projectName": "Hotfix",
|
||||
"projectPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj",
|
||||
"packagesPath": "/Users/fantasy/.nuget/packages/",
|
||||
"outputPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"/Users/fantasy/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net8.0"
|
||||
],
|
||||
"sources": {
|
||||
"/usr/local/share/dotnet/library-packs": {},
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"projectReferences": {
|
||||
"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj": {
|
||||
"projectPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "all"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.100"
|
||||
},
|
||||
"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": "K6lNdXXdUo0=",
|
||||
"success": true,
|
||||
"projectFilePath": "/Users/fantasy/Movies/邮件系统/Lession/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.2.22/fantasy-net.2024.2.22.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.1.0/mongodb.bson.3.1.0.nupkg.sha512",
|
||||
"/Users/fantasy/.nuget/packages/mongodb.driver/3.1.0/mongodb.driver.3.1.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/9.0.0/system.io.pipelines.9.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/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj","projectName":"Hotfix","projectPath":"/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj","outputPath":"/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net8.0"],"sources":{"/usr/local/share/dotnet/library-packs":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj":{"projectPath":"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"all"},"SdkAnalysisLevel":"9.0.100"}"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 @@
|
||||
17392438089775538
|
||||
1
邮件系统课程完整代码/Server/Hotfix/obj/rider.project.restore.info
Normal file
1
邮件系统课程完整代码/Server/Hotfix/obj/rider.project.restore.info
Normal file
@@ -0,0 +1 @@
|
||||
17392438089775538
|
||||
Reference in New Issue
Block a user