提交示例代码
This commit is contained in:
BIN
邮件系统课程完整代码/Server/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/App/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/App/.DS_Store
vendored
Normal file
Binary file not shown.
27
邮件系统课程完整代码/Server/App/App.csproj
Normal file
27
邮件系统课程完整代码/Server/App/App.csproj
Normal file
@@ -0,0 +1,27 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<OutputPath>../../Bin/</OutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<OutputPath>../../Bin</OutputPath>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Entity\Entity.csproj" />
|
||||
<ProjectReference Include="..\Hotfix\Hotfix.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Fantasy-Net.NLog" Version="2024.1.20" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
91
邮件系统课程完整代码/Server/App/NLog.config
Normal file
91
邮件系统课程完整代码/Server/App/NLog.config
Normal file
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd">
|
||||
<targets async="true">
|
||||
<target name="ServerDebug" xsi:type="File"
|
||||
encoding="UTF-8"
|
||||
createDirs="true"
|
||||
autoFlush="false"
|
||||
keepFileOpen="true"
|
||||
concurrentWrites="true"
|
||||
openFileCacheTimeout="30"
|
||||
openFileFlushTimeout="60"
|
||||
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Debug.log"
|
||||
layout="${longdate} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}" />
|
||||
</targets>
|
||||
<targets async="true">
|
||||
<target name="ServerInfo" xsi:type="File"
|
||||
encoding="UTF-8"
|
||||
createDirs="true"
|
||||
autoFlush="false"
|
||||
keepFileOpen="true"
|
||||
concurrentWrites="true"
|
||||
openFileCacheTimeout="30"
|
||||
openFileFlushTimeout="60"
|
||||
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Info.log"
|
||||
layout="${longdate} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}" />
|
||||
</targets>
|
||||
<targets async="true">
|
||||
<target name="ServerWarn" xsi:type="File"
|
||||
encoding="UTF-8"
|
||||
createDirs="true"
|
||||
autoFlush="false"
|
||||
keepFileOpen="true"
|
||||
concurrentWrites="true"
|
||||
openFileCacheTimeout="30"
|
||||
openFileFlushTimeout="60"
|
||||
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Warn.log"
|
||||
layout="${longdate} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}" />
|
||||
</targets>
|
||||
<targets async="true">
|
||||
<target name="ServerError" xsi:type="File"
|
||||
encoding="UTF-8"
|
||||
createDirs="true"
|
||||
autoFlush="false"
|
||||
keepFileOpen="true"
|
||||
concurrentWrites="true"
|
||||
openFileCacheTimeout="30"
|
||||
openFileFlushTimeout="60"
|
||||
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Error.log"
|
||||
layout="${longdate} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}" />
|
||||
</targets>
|
||||
<targets async="true">
|
||||
<target name="ServerTrace" xsi:type="File"
|
||||
encoding="UTF-8"
|
||||
createDirs="true"
|
||||
autoFlush="false"
|
||||
keepFileOpen="true"
|
||||
concurrentWrites="true"
|
||||
openFileCacheTimeout="30"
|
||||
openFileFlushTimeout="60"
|
||||
fileName="${basedir}/../Logs/Server/Server${date:format=yyyyMMdd}/${logger}.${var:appId}.${date:format=yyyyMMddHH}.Trace.log"
|
||||
layout="${longdate} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}" />
|
||||
</targets>
|
||||
<targets async="true">
|
||||
<target name="ConsoleColor" xsi:type="ColoredConsole"
|
||||
useDefaultRowHighlightingRules="false"
|
||||
layout="${longdate} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}">
|
||||
<highlight-row condition="level == LogLevel.Debug" foregroundColor="DarkGreen" />
|
||||
<highlight-row condition="level == LogLevel.Info" foregroundColor="Gray" />
|
||||
<highlight-row condition="level == LogLevel.Warn" foregroundColor="Yellow" />
|
||||
<highlight-row condition="level == LogLevel.Error" foregroundColor="DarkRed" />
|
||||
<highlight-row condition="level == LogLevel.Fatal" foregroundColor="Red" />
|
||||
</target>
|
||||
</targets>
|
||||
<rules>
|
||||
<!-- 控制台 调试或编辑器启动的时候会调用-->
|
||||
<logger ruleName="ConsoleTrace" name="Server" level="Trace" writeTo="ConsoleColor" />
|
||||
<logger ruleName="ConsoleDebug" name="Server" level="Debug" writeTo="ConsoleColor" />
|
||||
<logger ruleName="ConsoleInfo" name="Server" level="Info" writeTo="ConsoleColor" />
|
||||
<logger ruleName="ConsoleWarn" name="Server" level="Warn" writeTo="ConsoleColor" />
|
||||
<logger ruleName="ConsoleError" name="Server" level="Error" writeTo="ConsoleColor" />
|
||||
<!-- 服务端日志输出文件 发布到服务器后会调用-->
|
||||
<logger ruleName="ServerDebug" name="Server" level="Debug" writeTo="ServerDebug" />
|
||||
<logger ruleName="ServerTrace" name="Server" level="Trace" writeTo="ServerTrace" />
|
||||
<logger ruleName="ServerInfo" name="Server" level="Info" writeTo="ServerInfo" />
|
||||
<logger ruleName="ServerWarn" name="Server" level="Warn" writeTo="ServerWarn" />
|
||||
<logger ruleName="ServerError" name="Server" level="Error" writeTo="ServerError" />
|
||||
</rules>
|
||||
</nlog>
|
||||
3483
邮件系统课程完整代码/Server/App/NLog.xsd
Normal file
3483
邮件系统课程完整代码/Server/App/NLog.xsd
Normal file
File diff suppressed because it is too large
Load Diff
23
邮件系统课程完整代码/Server/App/Program.cs
Normal file
23
邮件系统课程完整代码/Server/App/Program.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using Fantasy.Helper;
|
||||
using Fantasy.IdFactory;
|
||||
using Fantasy.Platform.Net;
|
||||
// 获取配置文件
|
||||
// 比如通过远程获取这个配置文件,这样可以多组服务器共享一套配置了
|
||||
var machineConfigText = await FileHelper.GetTextByRelativePath("../../Config/Json/Server/MachineConfigData.Json");
|
||||
var processConfigText = await FileHelper.GetTextByRelativePath("../../Config/Json/Server/ProcessConfigData.Json");
|
||||
var worldConfigText = await FileHelper.GetTextByRelativePath("../../Config/Json/Server/WorldConfigData.Json");
|
||||
var sceneConfigText = await FileHelper.GetTextByRelativePath("../../Config/Json/Server/SceneConfigData.Json");
|
||||
// 初始化配置文件
|
||||
// 如果重复初始化方法会覆盖掉上一次的数据,非常适合热重载时使用
|
||||
MachineConfigData.Initialize(machineConfigText);
|
||||
ProcessConfigData.Initialize(processConfigText);
|
||||
WorldConfigData.Initialize(worldConfigText);
|
||||
SceneConfigData.Initialize(sceneConfigText);
|
||||
// 注册日志模块到框架
|
||||
// 开发者可以自己注册日志系统到框架,只要实现Fantasy.ILog接口就可以。
|
||||
// 这里用的是NLog日志系统注册到框架中。
|
||||
Fantasy.Log.Register(new Fantasy.NLog("Server"));
|
||||
// 初始化框架,添加程序集到框架中
|
||||
Fantasy.Platform.Net.Entry.Initialize(Fantasy.AssemblyHelper.Assemblies);
|
||||
// 启动Fantasy.Net
|
||||
await Fantasy.Platform.Net.Entry.Start();
|
||||
10
邮件系统课程完整代码/Server/App/Properties/launchSettings.json
Normal file
10
邮件系统课程完整代码/Server/App/Properties/launchSettings.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"App": {
|
||||
"commandName": "Project",
|
||||
"environmentVariables": {},
|
||||
"commandLineArgs": "--m Develop"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
邮件系统课程完整代码/Server/App/bin/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/App/bin/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/App/bin/Debug/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/App/bin/Debug/.DS_Store
vendored
Normal file
Binary file not shown.
211
邮件系统课程完整代码/Server/App/obj/App.csproj.nuget.dgspec.json
Normal file
211
邮件系统课程完整代码/Server/App/obj/App.csproj.nuget.dgspec.json
Normal file
@@ -0,0 +1,211 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"/Users/fantasy/Movies/邮件系统/Lession/Server/App/App.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"/Users/fantasy/Movies/邮件系统/Lession/Server/App/App.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/Users/fantasy/Movies/邮件系统/Lession/Server/App/App.csproj",
|
||||
"projectName": "App",
|
||||
"projectPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/App/App.csproj",
|
||||
"packagesPath": "/Users/fantasy/.nuget/packages/",
|
||||
"outputPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/App/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"
|
||||
},
|
||||
"/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj": {
|
||||
"projectPath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
},
|
||||
"restoreAuditProperties": {
|
||||
"enableAudit": "true",
|
||||
"auditLevel": "low",
|
||||
"auditMode": "all"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.100"
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
"targetAlias": "net8.0",
|
||||
"dependencies": {
|
||||
"Fantasy-Net.NLog": {
|
||||
"target": "Package",
|
||||
"version": "[2024.1.20, )"
|
||||
}
|
||||
},
|
||||
"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/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/App/obj/App.csproj.nuget.g.props
Normal file
15
邮件系统课程完整代码/Server/App/obj/App.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>
|
||||
7
邮件系统课程完整代码/Server/App/obj/App.csproj.nuget.g.targets
Normal file
7
邮件系统课程完整代码/Server/App/obj/App.csproj.nuget.g.targets
Normal file
@@ -0,0 +1,7 @@
|
||||
<?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')" />
|
||||
<Import Project="$(NuGetPackageRoot)fantasy-net.nlog/2024.1.20/buildTransitive/Fantasy-Net.NLog.targets" Condition="Exists('$(NuGetPackageRoot)fantasy-net.nlog/2024.1.20/buildTransitive/Fantasy-Net.NLog.targets')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
|
||||
22
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/App.AssemblyInfo.cs
Normal file
22
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/App.AssemblyInfo.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("App")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("App")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("App")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
821daf211998e642fd8571f61784d5b8d6071e65f77b7ed22cfcfb2a43a9388a
|
||||
@@ -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 = App
|
||||
build_property.ProjectDir = /Users/fantasy/Movies/邮件系统/Lession/Server/App/
|
||||
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/App/obj/Debug/net8.0/App.assets.cache
Normal file
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/App.assets.cache
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
6ea5d9eb7371ff0fdba6e9dd9f3ce9a46fdad1c2971d1d6a0432963b1d7c5398
|
||||
@@ -0,0 +1,18 @@
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.csproj.AssemblyReference.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.GeneratedMSBuildEditorConfig.editorconfig
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.AssemblyInfoInputs.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.AssemblyInfo.cs
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.csproj.CoreCompileInputs.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.csproj.Up2Date
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/refint/App.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.pdb
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/App.genruntimeconfig.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/App/obj/Debug/net8.0/ref/App.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Bin/net8.0/App
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Bin/net8.0/NLog.config
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Bin/net8.0/NLog.xsd
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Bin/net8.0/App.deps.json
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Bin/net8.0/App.runtimeconfig.json
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Bin/net8.0/App.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Bin/net8.0/App.pdb
|
||||
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/App.dll
Normal file
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/App.dll
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
43c0ad4056946926b0891319e5039496ccf3772662f3c5f77d051184ee024242
|
||||
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/App.pdb
Normal file
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/App.pdb
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/apphost
Normal file
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/apphost
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/ref/App.dll
Normal file
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/ref/App.dll
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/refint/App.dll
Normal file
BIN
邮件系统课程完整代码/Server/App/obj/Debug/net8.0/refint/App.dll
Normal file
Binary file not shown.
1064
邮件系统课程完整代码/Server/App/obj/project.assets.json
Normal file
1064
邮件系统课程完整代码/Server/App/obj/project.assets.json
Normal file
File diff suppressed because it is too large
Load Diff
32
邮件系统课程完整代码/Server/App/obj/project.nuget.cache
Normal file
32
邮件系统课程完整代码/Server/App/obj/project.nuget.cache
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "KiiXK9qXJ3M=",
|
||||
"success": true,
|
||||
"projectFilePath": "/Users/fantasy/Movies/邮件系统/Lession/Server/App/App.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/fantasy-net.nlog/2024.1.20/fantasy-net.nlog.2024.1.20.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/nlog/5.3.4/nlog.5.3.4.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/App/obj/project.packagespec.json
Normal file
1
邮件系统课程完整代码/Server/App/obj/project.packagespec.json
Normal file
@@ -0,0 +1 @@
|
||||
"restore":{"projectUniqueName":"/Users/fantasy/Movies/邮件系统/Lession/Server/App/App.csproj","projectName":"App","projectPath":"/Users/fantasy/Movies/邮件系统/Lession/Server/App/App.csproj","outputPath":"/Users/fantasy/Movies/邮件系统/Lession/Server/App/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"},"/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj":{"projectPath":"/Users/fantasy/Movies/邮件系统/Lession/Server/Hotfix/Hotfix.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"all"},"SdkAnalysisLevel":"9.0.100"}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"Fantasy-Net.NLog":{"target":"Package","version":"[2024.1.20, )"}},"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"}}
|
||||
1
邮件系统课程完整代码/Server/App/obj/rider.project.model.nuget.info
Normal file
1
邮件系统课程完整代码/Server/App/obj/rider.project.model.nuget.info
Normal file
@@ -0,0 +1 @@
|
||||
17392438089775705
|
||||
1
邮件系统课程完整代码/Server/App/obj/rider.project.restore.info
Normal file
1
邮件系统课程完整代码/Server/App/obj/rider.project.restore.info
Normal file
@@ -0,0 +1 @@
|
||||
17392438089775705
|
||||
BIN
邮件系统课程完整代码/Server/Entity/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/Entity/.DS_Store
vendored
Normal file
Binary file not shown.
39
邮件系统课程完整代码/Server/Entity/AssemblyHelper.cs
Normal file
39
邮件系统课程完整代码/Server/Entity/AssemblyHelper.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using System.Runtime.Loader;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public static class AssemblyHelper
|
||||
{
|
||||
private const string HotfixDll = "Hotfix";
|
||||
private static AssemblyLoadContext? _assemblyLoadContext = null;
|
||||
|
||||
public static System.Reflection.Assembly[] Assemblies
|
||||
{
|
||||
get
|
||||
{
|
||||
var assemblies = new System.Reflection.Assembly[2];
|
||||
assemblies[0] = LoadEntityAssembly();
|
||||
assemblies[1] = LoadHotfixAssembly();
|
||||
return assemblies;
|
||||
}
|
||||
}
|
||||
|
||||
private static System.Reflection.Assembly LoadEntityAssembly()
|
||||
{
|
||||
return typeof(AssemblyHelper).Assembly;
|
||||
}
|
||||
|
||||
private static System.Reflection.Assembly LoadHotfixAssembly()
|
||||
{
|
||||
if (_assemblyLoadContext != null)
|
||||
{
|
||||
_assemblyLoadContext.Unload();
|
||||
System.GC.Collect();
|
||||
}
|
||||
|
||||
_assemblyLoadContext = new AssemblyLoadContext(HotfixDll, true);
|
||||
var dllBytes = File.ReadAllBytes(Path.Combine(Environment.CurrentDirectory, $"{HotfixDll}.dll"));
|
||||
var pdbBytes = File.ReadAllBytes(Path.Combine(Environment.CurrentDirectory, $"{HotfixDll}.pdb"));
|
||||
return _assemblyLoadContext.LoadFromStream(new MemoryStream(dllBytes), new MemoryStream(pdbBytes));
|
||||
}
|
||||
}
|
||||
13
邮件系统课程完整代码/Server/Entity/Entity.csproj
Normal file
13
邮件系统课程完整代码/Server/Entity/Entity.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>
|
||||
<PackageReference Include="Fantasy-Net" Version="2024.2.22" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
6
邮件系统课程完整代码/Server/Entity/Enum/CoroutineLockConst.cs
Normal file
6
邮件系统课程完整代码/Server/Entity/Enum/CoroutineLockConst.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace Fantasy;
|
||||
|
||||
public static class CoroutineLockConst
|
||||
{
|
||||
public const long LoginKey = 1;
|
||||
}
|
||||
12
邮件系统课程完整代码/Server/Entity/Gate/Entity/Account.cs
Normal file
12
邮件系统课程完整代码/Server/Entity/Gate/Entity/Account.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using Fantasy.Entitas;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class Account : Entity
|
||||
{
|
||||
public string Name;
|
||||
public long CreateTime;
|
||||
[BsonIgnore]
|
||||
public long MailRouteId;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
using Fantasy.Entitas;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class GateAccountFlagComponent : Entity
|
||||
{
|
||||
public Account Account;
|
||||
}
|
||||
BIN
邮件系统课程完整代码/Server/Entity/Generate/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/Entity/Generate/.DS_Store
vendored
Normal file
Binary file not shown.
29
邮件系统课程完整代码/Server/Entity/Generate/CustomExport/SceneType.cs
Normal file
29
邮件系统课程完整代码/Server/Entity/Generate/CustomExport/SceneType.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
namespace Fantasy
|
||||
{
|
||||
// 生成器自动生成,请不要手动编辑。
|
||||
public static class SceneType
|
||||
{
|
||||
public const int Authentication = 1;
|
||||
public const int Addressable = 2;
|
||||
public const int Gate = 3;
|
||||
public const int Map = 4;
|
||||
public const int CopyDispatcher = 5;
|
||||
public const int CopyManager = 6;
|
||||
public const int Copy = 7;
|
||||
public const int Chat = 8;
|
||||
public const int Mail = 9;
|
||||
|
||||
public static readonly Dictionary<string, int> SceneTypeDic = new Dictionary<string, int>()
|
||||
{
|
||||
{ "Authentication", 1 },
|
||||
{ "Addressable", 2 },
|
||||
{ "Gate", 3 },
|
||||
{ "Map", 4 },
|
||||
{ "CopyDispatcher", 5 },
|
||||
{ "CopyManager", 6 },
|
||||
{ "Copy", 7 },
|
||||
{ "Chat", 8 },
|
||||
{ "Mail", 9 },
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
using ProtoBuf;
|
||||
|
||||
using System.Collections.Generic;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using Fantasy;
|
||||
using Fantasy.Network.Interface;
|
||||
using Fantasy.Serialize;
|
||||
// ReSharper disable InconsistentNaming
|
||||
// ReSharper disable RedundantUsingDirective
|
||||
// ReSharper disable RedundantOverriddenMember
|
||||
// ReSharper disable PartialTypeWithSinglePart
|
||||
// ReSharper disable UnusedAutoPropertyAccessor.Global
|
||||
// ReSharper disable MemberCanBePrivate.Global
|
||||
// ReSharper disable CheckNamespace
|
||||
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
|
||||
#pragma warning disable CS8618
|
||||
|
||||
namespace Fantasy
|
||||
{
|
||||
/// <summary>
|
||||
/// Gate服务器登陆到Mail服务器
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class G2Mail_LoginRequest : AMessage, IRouteRequest, IProto
|
||||
{
|
||||
public static G2Mail_LoginRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<G2Mail_LoginRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
Name = default;
|
||||
AccountId = default;
|
||||
CreateTime = default;
|
||||
GateRouteId = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<G2Mail_LoginRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public Mail2G_LoginResponse ResponseType { get; set; }
|
||||
public uint OpCode() { return InnerOpcode.G2Mail_LoginRequest; }
|
||||
[ProtoMember(1)]
|
||||
public string Name { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public long AccountId { get; set; }
|
||||
[ProtoMember(3)]
|
||||
public long CreateTime { get; set; }
|
||||
[ProtoMember(4)]
|
||||
public long GateRouteId { get; set; }
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2G_LoginResponse : AMessage, IRouteResponse, IProto
|
||||
{
|
||||
public static Mail2G_LoginResponse Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2G_LoginResponse>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
MailUnitRouteId = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2G_LoginResponse>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return InnerOpcode.Mail2G_LoginResponse; }
|
||||
[ProtoMember(1)]
|
||||
public long MailUnitRouteId { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 发送一个Gate服务器发送给Mail之间的测试协议
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class G2Mail_TestMessage : AMessage, IRouteMessage, IProto
|
||||
{
|
||||
public static G2Mail_TestMessage Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<G2Mail_TestMessage>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
Tag = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<G2Mail_TestMessage>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return InnerOpcode.G2Mail_TestMessage; }
|
||||
[ProtoMember(1)]
|
||||
public string Tag { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 发送给Mail服务器进行下线
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class G2Mail_ExitRequest : AMessage, IRouteRequest, IProto
|
||||
{
|
||||
public static G2Mail_ExitRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<G2Mail_ExitRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<G2Mail_ExitRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public Mail2G_ExitResponse ResponseType { get; set; }
|
||||
public uint OpCode() { return InnerOpcode.G2Mail_ExitRequest; }
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2G_ExitResponse : AMessage, IRouteResponse, IProto
|
||||
{
|
||||
public static Mail2G_ExitResponse Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2G_ExitResponse>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2G_ExitResponse>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return InnerOpcode.Mail2G_ExitResponse; }
|
||||
[ProtoMember(1)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 其他服务器发送邮件
|
||||
/// </summary>
|
||||
public partial class Other2Mail_SendMailRequest : AMessage, IRouteRequest
|
||||
{
|
||||
public static Other2Mail_SendMailRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Other2Mail_SendMailRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
MailBox = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Other2Mail_SendMailRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[BsonIgnore]
|
||||
public Mail2Other_SendMailResponse ResponseType { get; set; }
|
||||
public uint OpCode() { return InnerOpcode.Other2Mail_SendMailRequest; }
|
||||
public MailBox MailBox { get; set; }
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2Other_SendMailResponse : AMessage, IRouteResponse, IProto
|
||||
{
|
||||
public static Mail2Other_SendMailResponse Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2Other_SendMailResponse>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2Other_SendMailResponse>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return InnerOpcode.Mail2Other_SendMailResponse; }
|
||||
[ProtoMember(1)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Fantasy
|
||||
{
|
||||
public static partial class InnerOpcode
|
||||
{
|
||||
public const uint G2Mail_LoginRequest = 1073751825;
|
||||
public const uint Mail2G_LoginResponse = 1207969553;
|
||||
public const uint G2Mail_TestMessage = 939534097;
|
||||
public const uint G2Mail_ExitRequest = 1073751826;
|
||||
public const uint Mail2G_ExitResponse = 1207969554;
|
||||
public const uint Other2Mail_SendMailRequest = 1082140435;
|
||||
public const uint Mail2Other_SendMailResponse = 1207969555;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,524 @@
|
||||
using ProtoBuf;
|
||||
|
||||
using System.Collections.Generic;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using Fantasy;
|
||||
using Fantasy.Network.Interface;
|
||||
using Fantasy.Serialize;
|
||||
// ReSharper disable InconsistentNaming
|
||||
// ReSharper disable RedundantUsingDirective
|
||||
// ReSharper disable RedundantOverriddenMember
|
||||
// ReSharper disable PartialTypeWithSinglePart
|
||||
// ReSharper disable UnusedAutoPropertyAccessor.Global
|
||||
// ReSharper disable MemberCanBePrivate.Global
|
||||
// ReSharper disable CheckNamespace
|
||||
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
|
||||
#pragma warning disable CS8618
|
||||
|
||||
namespace Fantasy
|
||||
{
|
||||
/// <summary>
|
||||
/// 登陆到Gate服务器
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class C2G_LoginRequest : AMessage, IRequest, IProto
|
||||
{
|
||||
public static C2G_LoginRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<C2G_LoginRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
Name = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<C2G_LoginRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public G2C_LoginResponse ResponseType { get; set; }
|
||||
public uint OpCode() { return OuterOpcode.C2G_LoginRequest; }
|
||||
[ProtoMember(1)]
|
||||
public string Name { get; set; }
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class G2C_LoginResponse : AMessage, IResponse, IProto
|
||||
{
|
||||
public static G2C_LoginResponse Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<G2C_LoginResponse>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<G2C_LoginResponse>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.G2C_LoginResponse; }
|
||||
[ProtoMember(1)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 客户端通知服务器退出游戏
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class C2G_Exit : AMessage, IMessage, IProto
|
||||
{
|
||||
public static C2G_Exit Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<C2G_Exit>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<C2G_Exit>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.C2G_Exit; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 测试Mail自定义Route协议
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class C2Mail_TestRequest : AMessage, ICustomRouteRequest, IProto
|
||||
{
|
||||
public static C2Mail_TestRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<C2Mail_TestRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
Tag = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<C2Mail_TestRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public Mail2C_TestResponse ResponseType { get; set; }
|
||||
public uint OpCode() { return OuterOpcode.C2Mail_TestRequest; }
|
||||
[ProtoIgnore]
|
||||
public int RouteType => Fantasy.RouteType.MailRoute;
|
||||
[ProtoMember(1)]
|
||||
public string Tag { get; set; }
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2C_TestResponse : AMessage, ICustomRouteResponse, IProto
|
||||
{
|
||||
public static Mail2C_TestResponse Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2C_TestResponse>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
Tag = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2C_TestResponse>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.Mail2C_TestResponse; }
|
||||
[ProtoMember(1)]
|
||||
public string Tag { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 一个邮件的完整信息
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class MailInfo : AMessage, IProto
|
||||
{
|
||||
public static MailInfo Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<MailInfo>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
MailId = default;
|
||||
OwnerId = default;
|
||||
Title = default;
|
||||
Content = default;
|
||||
CreateTime = default;
|
||||
ExpireTime = default;
|
||||
Money = default;
|
||||
MailState = default;
|
||||
MailType = default;
|
||||
Items.Clear();
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<MailInfo>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoMember(1)]
|
||||
public long MailId { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public long OwnerId { get; set; }
|
||||
[ProtoMember(3)]
|
||||
public string Title { get; set; }
|
||||
[ProtoMember(4)]
|
||||
public string Content { get; set; }
|
||||
[ProtoMember(5)]
|
||||
public long CreateTime { get; set; }
|
||||
[ProtoMember(6)]
|
||||
public long ExpireTime { get; set; }
|
||||
[ProtoMember(7)]
|
||||
public int Money { get; set; }
|
||||
[ProtoMember(8)]
|
||||
public int MailState { get; set; }
|
||||
[ProtoMember(9)]
|
||||
public int MailType { get; set; }
|
||||
[ProtoMember(10)]
|
||||
public List<ItemInfo> Items = new List<ItemInfo>();
|
||||
}
|
||||
/// <summary>
|
||||
/// 一个邮件的简单版消息
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class MailSimplifyInfo : AMessage, IProto
|
||||
{
|
||||
public static MailSimplifyInfo Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<MailSimplifyInfo>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
MailId = default;
|
||||
OwnerId = default;
|
||||
Title = default;
|
||||
Content = default;
|
||||
CreateTime = default;
|
||||
ExpireTime = default;
|
||||
MailState = default;
|
||||
MailType = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<MailSimplifyInfo>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoMember(1)]
|
||||
public long MailId { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public long OwnerId { get; set; }
|
||||
[ProtoMember(3)]
|
||||
public string Title { get; set; }
|
||||
[ProtoMember(4)]
|
||||
public string Content { get; set; }
|
||||
[ProtoMember(5)]
|
||||
public long CreateTime { get; set; }
|
||||
[ProtoMember(6)]
|
||||
public long ExpireTime { get; set; }
|
||||
[ProtoMember(7)]
|
||||
public int MailState { get; set; }
|
||||
[ProtoMember(8)]
|
||||
public int MailType { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 一个简单的物品信息
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class ItemInfo : AMessage, IProto
|
||||
{
|
||||
public static ItemInfo Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<ItemInfo>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ItemId = default;
|
||||
Name = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<ItemInfo>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoMember(1)]
|
||||
public long ItemId { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public string Name { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// Mail通知客户端有新的邮件
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class Mail2C_HaveMail : AMessage, ICustomRouteMessage, IProto
|
||||
{
|
||||
public static Mail2C_HaveMail Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2C_HaveMail>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
Mail = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2C_HaveMail>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.Mail2C_HaveMail; }
|
||||
[ProtoIgnore]
|
||||
public int RouteType => Fantasy.RouteType.MailRoute;
|
||||
[ProtoMember(1)]
|
||||
public MailSimplifyInfo Mail { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// Mail通知客户端邮件状态变化
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class Mail2C_MailState : AMessage, ICustomRouteMessage, IProto
|
||||
{
|
||||
public static Mail2C_MailState Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2C_MailState>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
MailState = default;
|
||||
MailId = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2C_MailState>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.Mail2C_MailState; }
|
||||
[ProtoIgnore]
|
||||
public int RouteType => Fantasy.RouteType.MailRoute;
|
||||
[ProtoMember(1)]
|
||||
public int MailState { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public long MailId { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 客户端获取档期所有邮件的信息
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class C2Mail_GetHaveMailRequest : AMessage, ICustomRouteRequest, IProto
|
||||
{
|
||||
public static C2Mail_GetHaveMailRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<C2Mail_GetHaveMailRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<C2Mail_GetHaveMailRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public Mail2C_GetHaveMailResposne ResponseType { get; set; }
|
||||
public uint OpCode() { return OuterOpcode.C2Mail_GetHaveMailRequest; }
|
||||
[ProtoIgnore]
|
||||
public int RouteType => Fantasy.RouteType.MailRoute;
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2C_GetHaveMailResposne : AMessage, ICustomRouteResponse, IProto
|
||||
{
|
||||
public static Mail2C_GetHaveMailResposne Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2C_GetHaveMailResposne>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
Mails.Clear();
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2C_GetHaveMailResposne>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.Mail2C_GetHaveMailResposne; }
|
||||
[ProtoMember(1)]
|
||||
public List<MailSimplifyInfo> Mails = new List<MailSimplifyInfo>();
|
||||
[ProtoMember(2)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 客户端发开一个邮件
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class C2Mail_OpenMailRequest : AMessage, ICustomRouteRequest, IProto
|
||||
{
|
||||
public static C2Mail_OpenMailRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<C2Mail_OpenMailRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
MailId = default;
|
||||
ReturnMailInfo = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<C2Mail_OpenMailRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public Mail2C_OpenMailResposne ResponseType { get; set; }
|
||||
public uint OpCode() { return OuterOpcode.C2Mail_OpenMailRequest; }
|
||||
[ProtoIgnore]
|
||||
public int RouteType => Fantasy.RouteType.MailRoute;
|
||||
[ProtoMember(1)]
|
||||
public long MailId { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public bool ReturnMailInfo { get; set; }
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2C_OpenMailResposne : AMessage, ICustomRouteResponse, IProto
|
||||
{
|
||||
public static Mail2C_OpenMailResposne Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2C_OpenMailResposne>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
MailInfo = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2C_OpenMailResposne>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.Mail2C_OpenMailResposne; }
|
||||
[ProtoMember(1)]
|
||||
public MailInfo MailInfo { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 客户端领取邮件的附件
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class C2Mail_ReceiveMailRequest : AMessage, ICustomRouteRequest, IProto
|
||||
{
|
||||
public static C2Mail_ReceiveMailRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<C2Mail_ReceiveMailRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
MailId = default;
|
||||
Money = default;
|
||||
ItemId.Clear();
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<C2Mail_ReceiveMailRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public Mail2C_ReceiveMailResponse ResponseType { get; set; }
|
||||
public uint OpCode() { return OuterOpcode.C2Mail_ReceiveMailRequest; }
|
||||
[ProtoIgnore]
|
||||
public int RouteType => Fantasy.RouteType.MailRoute;
|
||||
[ProtoMember(1)]
|
||||
public long MailId { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public bool Money { get; set; }
|
||||
[ProtoMember(3)]
|
||||
public List<long> ItemId = new List<long>();
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2C_ReceiveMailResponse : AMessage, ICustomRouteResponse, IProto
|
||||
{
|
||||
public static Mail2C_ReceiveMailResponse Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2C_ReceiveMailResponse>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2C_ReceiveMailResponse>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.Mail2C_ReceiveMailResponse; }
|
||||
[ProtoMember(1)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 客户端通知服务器删除一个邮件
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class C2Mail_RemoveMailRequest : AMessage, ICustomRouteRequest, IProto
|
||||
{
|
||||
public static C2Mail_RemoveMailRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<C2Mail_RemoveMailRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
MailId = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<C2Mail_RemoveMailRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public Mail2C_RemoveMailResponse ResponseType { get; set; }
|
||||
public uint OpCode() { return OuterOpcode.C2Mail_RemoveMailRequest; }
|
||||
[ProtoIgnore]
|
||||
public int RouteType => Fantasy.RouteType.MailRoute;
|
||||
[ProtoMember(1)]
|
||||
public long MailId { get; set; }
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2C_RemoveMailResponse : AMessage, ICustomRouteResponse, IProto
|
||||
{
|
||||
public static Mail2C_RemoveMailResponse Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2C_RemoveMailResponse>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2C_RemoveMailResponse>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.Mail2C_RemoveMailResponse; }
|
||||
[ProtoMember(1)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 客户端玩家发送邮件到另外一个玩家
|
||||
/// </summary>
|
||||
[ProtoContract]
|
||||
public partial class C2Mail_SendMailRequest : AMessage, ICustomRouteRequest, IProto
|
||||
{
|
||||
public static C2Mail_SendMailRequest Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<C2Mail_SendMailRequest>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
UserName = default;
|
||||
Title = default;
|
||||
Content = default;
|
||||
Money = default;
|
||||
ItemId.Clear();
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<C2Mail_SendMailRequest>(this);
|
||||
#endif
|
||||
}
|
||||
[ProtoIgnore]
|
||||
public Mail2C_SendMailResponse ResponseType { get; set; }
|
||||
public uint OpCode() { return OuterOpcode.C2Mail_SendMailRequest; }
|
||||
[ProtoIgnore]
|
||||
public int RouteType => Fantasy.RouteType.MailRoute;
|
||||
[ProtoMember(1)]
|
||||
public string UserName { get; set; }
|
||||
[ProtoMember(2)]
|
||||
public string Title { get; set; }
|
||||
[ProtoMember(3)]
|
||||
public string Content { get; set; }
|
||||
[ProtoMember(4)]
|
||||
public int Money { get; set; }
|
||||
[ProtoMember(5)]
|
||||
public List<long> ItemId = new List<long>();
|
||||
}
|
||||
[ProtoContract]
|
||||
public partial class Mail2C_SendMailResponse : AMessage, ICustomRouteResponse, IProto
|
||||
{
|
||||
public static Mail2C_SendMailResponse Create(Scene scene)
|
||||
{
|
||||
return scene.MessagePoolComponent.Rent<Mail2C_SendMailResponse>();
|
||||
}
|
||||
public override void Dispose()
|
||||
{
|
||||
ErrorCode = default;
|
||||
#if FANTASY_NET || FANTASY_UNITY
|
||||
GetScene().MessagePoolComponent.Return<Mail2C_SendMailResponse>(this);
|
||||
#endif
|
||||
}
|
||||
public uint OpCode() { return OuterOpcode.Mail2C_SendMailResponse; }
|
||||
[ProtoMember(1)]
|
||||
public uint ErrorCode { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
namespace Fantasy
|
||||
{
|
||||
public static partial class OuterOpcode
|
||||
{
|
||||
public const uint C2G_LoginRequest = 268445457;
|
||||
public const uint G2C_LoginResponse = 402663185;
|
||||
public const uint C2G_Exit = 134227729;
|
||||
public const uint C2Mail_TestRequest = 2281711377;
|
||||
public const uint Mail2C_TestResponse = 2415929105;
|
||||
public const uint Mail2C_HaveMail = 2147493649;
|
||||
public const uint Mail2C_MailState = 2147493650;
|
||||
public const uint C2Mail_GetHaveMailRequest = 2281711378;
|
||||
public const uint Mail2C_GetHaveMailResposne = 2415929106;
|
||||
public const uint C2Mail_OpenMailRequest = 2281711379;
|
||||
public const uint Mail2C_OpenMailResposne = 2415929107;
|
||||
public const uint C2Mail_ReceiveMailRequest = 2281711380;
|
||||
public const uint Mail2C_ReceiveMailResponse = 2415929108;
|
||||
public const uint C2Mail_RemoveMailRequest = 2281711381;
|
||||
public const uint Mail2C_RemoveMailResponse = 2415929109;
|
||||
public const uint C2Mail_SendMailRequest = 2281711382;
|
||||
public const uint Mail2C_SendMailResponse = 2415929110;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace Fantasy
|
||||
{
|
||||
// Route协议定义(需要定义1000以上、因为1000以内的框架预留)
|
||||
public static class RouteType
|
||||
{
|
||||
public const int MailRoute = 1001; // Mail
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using Fantasy.DataStructure.Collection;
|
||||
using Fantasy.Entitas;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
/// <summary>
|
||||
/// 邮件物流中转中心,用来存放所有离线的邮件。
|
||||
/// 玩家可以在上线的第一时间去这里领取属于自己的邮件。
|
||||
/// </summary>
|
||||
public class MailBoxManageComponent : Entity
|
||||
{
|
||||
// 定时清楚过期邮件的时间
|
||||
public const int MailCheckTIme = 10000;
|
||||
// 存放所有邮箱都会在这里,包括发送给个人的和所有人的邮件。
|
||||
public readonly Dictionary<long, MailBox> MailBoxes = new Dictionary<long, MailBox>();
|
||||
// 个人领取邮件列表
|
||||
public readonly OneToManyList<long, MailBox> MailsByAccount = new OneToManyList<long, MailBox>();
|
||||
// 按照邮件箱类型存储
|
||||
public readonly OneToManyList<int, MailBox> MailsByMailBoxType = new OneToManyList<int, MailBox>();
|
||||
// 按照时间排序的邮件箱
|
||||
public readonly SortedOneToManyList<long, long> Timers = new SortedOneToManyList<long, long>();
|
||||
// 临时的存放过期时间的队列
|
||||
public readonly Queue<long> TimeOutQueue = new Queue<long>();
|
||||
// 时间任务的Id
|
||||
public long TimerId;
|
||||
// 最小的时间
|
||||
public long MinTime;
|
||||
}
|
||||
23
邮件系统课程完整代码/Server/Entity/Mail/Components/MailComponent.cs
Normal file
23
邮件系统课程完整代码/Server/Entity/Mail/Components/MailComponent.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using Fantasy.DataStructure.Collection;
|
||||
using Fantasy.Entitas;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using MongoDB.Bson.Serialization.Options;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
/// <summary>
|
||||
/// 这个代表一个用户身上所有邮件的组件
|
||||
/// </summary>
|
||||
public sealed class MailComponent : Entity
|
||||
{
|
||||
// 最大的邮件数量
|
||||
public const int MaxMailCount = 50;
|
||||
// 邮件的过期时间,这个是过期7天时间。
|
||||
public const int MailExpireTime = 1000 * 60 * 60 * 24 * 7;
|
||||
// 玩家的邮件
|
||||
[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)]
|
||||
public Dictionary<long, Mail> Mails = new Dictionary<long, Mail>();
|
||||
// 按照时间进行排序
|
||||
[BsonIgnore]
|
||||
public readonly SortedOneToManyList<long, long> Timer = new SortedOneToManyList<long, long>();
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
using Fantasy.Entitas;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class MailUnitManageComponent : Entity
|
||||
{
|
||||
public readonly Dictionary<long, MailUnit> Online = new Dictionary<long, MailUnit>();
|
||||
public readonly Dictionary<string, MailUnit> UnitByName = new Dictionary<string, MailUnit>();
|
||||
public readonly Dictionary<long, MailUnit> UnitByAccountId = new Dictionary<long, MailUnit>();
|
||||
}
|
||||
8
邮件系统课程完整代码/Server/Entity/Mail/Entity/Item.cs
Normal file
8
邮件系统课程完整代码/Server/Entity/Mail/Entity/Item.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using Fantasy.Entitas;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class Item : Entity
|
||||
{
|
||||
public string Name;
|
||||
}
|
||||
25
邮件系统课程完整代码/Server/Entity/Mail/Entity/Mail.cs
Normal file
25
邮件系统课程完整代码/Server/Entity/Mail/Entity/Mail.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using Fantasy.Entitas;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
using MongoDB.Bson.Serialization.Options;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
/// <summary>
|
||||
/// 代表游戏中的一封邮件实体
|
||||
/// </summary>
|
||||
public sealed class Mail : Entity
|
||||
{
|
||||
// 这个代表里游戏中的一封邮件
|
||||
// 标题、内容、金钱、物品
|
||||
public long OwnerId; // 邮件拥有者的Id(AccountId、UnitId、RoleId)
|
||||
public string Title; // 邮件的标题
|
||||
public string Content; // 邮件的内容
|
||||
public long CreateTime; // 邮件的创建时间
|
||||
public long ExpireTime; // 邮件的过期时间(决定这个实体的生命周期)
|
||||
public int Money; // 邮件的中钱
|
||||
public MailState MailState; // 邮件的状态
|
||||
public MailType MailType; // 邮件的类型
|
||||
public List<Item> Items = new List<Item>(); // 邮件中的物品
|
||||
// [BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)]
|
||||
// public Dictionary<long,Item> Items = new Dictionary<long,Item>();
|
||||
}
|
||||
24
邮件系统课程完整代码/Server/Entity/Mail/Entity/MailBox.cs
Normal file
24
邮件系统课程完整代码/Server/Entity/Mail/Entity/MailBox.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using Fantasy.Entitas;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
/// <summary>
|
||||
/// 邮件箱
|
||||
/// </summary>
|
||||
public sealed class MailBox : Entity
|
||||
{
|
||||
// 快递
|
||||
// 快递包装、用盒子。然后这个盒子上有一个标签、收件人、发件人、快递的公司。
|
||||
// 这个盒子了。可以装任何不同种类的东西。
|
||||
// 一对一、我发一个快递,给张三和李四。
|
||||
|
||||
// 但是邮件可能会有这个的功能,比如给某一个范围的人发送同一份邮件,比如补偿、或者奖励。
|
||||
|
||||
public Mail Mail; // 邮件
|
||||
public long CreateTime; // 箱子的创建时间
|
||||
public long ExpireTime; // 箱子的过期时间
|
||||
public MailBoxType MailBoxType; // 箱子的类型
|
||||
public HashSet<long> AccountId = new HashSet<long>(); // 收件人
|
||||
public HashSet<long> Received = new HashSet<long>(); // 领取过的人
|
||||
public long SendAccountId; // 发件人/发送人
|
||||
}
|
||||
13
邮件系统课程完整代码/Server/Entity/Mail/Entity/MailUnit.cs
Normal file
13
邮件系统课程完整代码/Server/Entity/Mail/Entity/MailUnit.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Fantasy.Entitas;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class MailUnit : Entity
|
||||
{
|
||||
public string Name;
|
||||
public long AccountId;
|
||||
public long CreateTime;
|
||||
[BsonIgnore]
|
||||
public long GateRouteId;
|
||||
}
|
||||
37
邮件系统课程完整代码/Server/Entity/Mail/Enum/MailEnum.cs
Normal file
37
邮件系统课程完整代码/Server/Entity/Mail/Enum/MailEnum.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using CommandLine;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public enum MailType
|
||||
{
|
||||
None = 0,
|
||||
System = 1, // 系统邮件
|
||||
Rewards = 2, // 奖励邮件(擂台、有奖问答)
|
||||
User = 3, // 个人邮件(玩家给玩家之间发送)
|
||||
}
|
||||
|
||||
public enum MailState
|
||||
{
|
||||
None = 0,
|
||||
Unread = 1, // 未读
|
||||
HaveRead = 2, // 已读
|
||||
NotClaimed = 3, // 未领取
|
||||
Received = 4, // 已领取
|
||||
}
|
||||
|
||||
public enum MailBoxType
|
||||
{
|
||||
None = 0,
|
||||
Specify = 1, // 指定目标
|
||||
Online = 2, // 给在线所有人发送邮件
|
||||
All = 3, // 所有人
|
||||
AllToDate = 4, // 根据玩家注册的时间发送邮件
|
||||
}
|
||||
|
||||
public enum MailRemoveActionType
|
||||
{
|
||||
None = 0,
|
||||
Remove = 1, // 手动移除
|
||||
ExpireTimeRemove = 2, // 过期时间移除
|
||||
Overtop = 3, // 超过邮件上限移除
|
||||
}
|
||||
BIN
邮件系统课程完整代码/Server/Entity/bin/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/Entity/bin/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/Entity/bin/Debug/.DS_Store
vendored
Normal file
BIN
邮件系统课程完整代码/Server/Entity/bin/Debug/.DS_Store
vendored
Normal file
Binary file not shown.
318
邮件系统课程完整代码/Server/Entity/bin/Debug/net8.0/Entity.deps.json
Normal file
318
邮件系统课程完整代码/Server/Entity/bin/Debug/net8.0/Entity.deps.json
Normal file
@@ -0,0 +1,318 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v8.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v8.0": {
|
||||
"Entity/1.0.0": {
|
||||
"dependencies": {
|
||||
"Fantasy-Net": "2024.2.22"
|
||||
},
|
||||
"runtime": {
|
||||
"Entity.dll": {}
|
||||
}
|
||||
},
|
||||
"CommandLineParser/2.9.1": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/CommandLine.dll": {
|
||||
"assemblyVersion": "2.9.1.0",
|
||||
"fileVersion": "2.9.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"DnsClient/1.6.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Win32.Registry": "5.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net5.0/DnsClient.dll": {
|
||||
"assemblyVersion": "1.6.1.0",
|
||||
"fileVersion": "1.6.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Fantasy-Net/2024.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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"Entity/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"CommandLineParser/2.9.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA==",
|
||||
"path": "commandlineparser/2.9.1",
|
||||
"hashPath": "commandlineparser.2.9.1.nupkg.sha512"
|
||||
},
|
||||
"DnsClient/1.6.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==",
|
||||
"path": "dnsclient/1.6.1",
|
||||
"hashPath": "dnsclient.1.6.1.nupkg.sha512"
|
||||
},
|
||||
"Fantasy-Net/2024.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"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
邮件系统课程完整代码/Server/Entity/bin/Debug/net8.0/Entity.dll
Normal file
BIN
邮件系统课程完整代码/Server/Entity/bin/Debug/net8.0/Entity.dll
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/Entity/bin/Debug/net8.0/Entity.pdb
Normal file
BIN
邮件系统课程完整代码/Server/Entity/bin/Debug/net8.0/Entity.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("Entity")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Entity")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Entity")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// 由 MSBuild WriteCodeFragment 类生成。
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
b7ceabf79c524d6ee0475da740239235018950a5f2c92d51c77f832004e64e6c
|
||||
@@ -0,0 +1,15 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net8.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Entity
|
||||
build_property.ProjectDir = /Users/fantasy/Movies/邮件系统/Lession/Server/Entity/
|
||||
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/Entity/obj/Debug/net8.0/Entity.assets.cache
Normal file
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/Entity.assets.cache
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
a2b05708cd015f9fdc4519d2f605ab8a519052de738a75c6155c82fb3f874598
|
||||
@@ -0,0 +1,12 @@
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/bin/Debug/net8.0/Entity.deps.json
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/bin/Debug/net8.0/Entity.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/bin/Debug/net8.0/Entity.pdb
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/Entity.csproj.AssemblyReference.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/Entity.GeneratedMSBuildEditorConfig.editorconfig
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/Entity.AssemblyInfoInputs.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/Entity.AssemblyInfo.cs
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/Entity.csproj.CoreCompileInputs.cache
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/Entity.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/refint/Entity.dll
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/Entity.pdb
|
||||
/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/obj/Debug/net8.0/ref/Entity.dll
|
||||
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/Entity.dll
Normal file
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/Entity.dll
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/Entity.pdb
Normal file
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/Entity.pdb
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/ref/Entity.dll
Normal file
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/ref/Entity.dll
Normal file
Binary file not shown.
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/refint/Entity.dll
Normal file
BIN
邮件系统课程完整代码/Server/Entity/obj/Debug/net8.0/refint/Entity.dll
Normal file
Binary file not shown.
74
邮件系统课程完整代码/Server/Entity/obj/Entity.csproj.nuget.dgspec.json
Normal file
74
邮件系统课程完整代码/Server/Entity/obj/Entity.csproj.nuget.dgspec.json
Normal file
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
15
邮件系统课程完整代码/Server/Entity/obj/Entity.csproj.nuget.g.props
Normal file
15
邮件系统课程完整代码/Server/Entity/obj/Entity.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>
|
||||
950
邮件系统课程完整代码/Server/Entity/obj/project.assets.json
Normal file
950
邮件系统课程完整代码/Server/Entity/obj/project.assets.json
Normal file
@@ -0,0 +1,950 @@
|
||||
{
|
||||
"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": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"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"
|
||||
]
|
||||
}
|
||||
},
|
||||
"projectFileDependencyGroups": {
|
||||
"net8.0": [
|
||||
"Fantasy-Net >= 2024.2.22"
|
||||
]
|
||||
},
|
||||
"packageFolders": {
|
||||
"/Users/fantasy/.nuget/packages/": {}
|
||||
},
|
||||
"project": {
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
30
邮件系统课程完整代码/Server/Entity/obj/project.nuget.cache
Normal file
30
邮件系统课程完整代码/Server/Entity/obj/project.nuget.cache
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "KLcJ+imhZmA=",
|
||||
"success": true,
|
||||
"projectFilePath": "/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"/Users/fantasy/.nuget/packages/commandlineparser/2.9.1/commandlineparser.2.9.1.nupkg.sha512",
|
||||
"/Users/fantasy/.nuget/packages/dnsclient/1.6.1/dnsclient.1.6.1.nupkg.sha512",
|
||||
"/Users/fantasy/.nuget/packages/fantasy-net/2024.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/Entity/obj/project.packagespec.json
Normal file
1
邮件系统课程完整代码/Server/Entity/obj/project.packagespec.json
Normal file
@@ -0,0 +1 @@
|
||||
"restore":{"projectUniqueName":"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj","projectName":"Entity","projectPath":"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/Entity.csproj","outputPath":"/Users/fantasy/Movies/邮件系统/Lession/Server/Entity/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":{}}},"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"}}
|
||||
@@ -0,0 +1 @@
|
||||
17392438089776433
|
||||
1
邮件系统课程完整代码/Server/Entity/obj/rider.project.restore.info
Normal file
1
邮件系统课程完整代码/Server/Entity/obj/rider.project.restore.info
Normal file
@@ -0,0 +1 @@
|
||||
17392438089776433
|
||||
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);
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user