提交示例代码

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

View File

@@ -0,0 +1,229 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Fantasy;
using Fantasy.Async;
using Fantasy.Network;
using UnityEngine;
using UnityEngine.UI;
public class Entry : MonoBehaviour
{
private Scene _scene;
private Session _session;
public Button LoginButton;
public Button ExitButton;
public Button SendTestButton;
public Button GetHaveMailButton;
public Button OpenMailButton;
public Button ReceiveMailButton;
public Button RemoveMailButton;
public Button SendMailButton;
public InputField LoginUserName;
public InputField MailId;
public InputField MailTitle;
public InputField MailUserName;
public InputField MailContent;
void Start()
{
LoginButton.onClick.RemoveAllListeners();
LoginButton.onClick.AddListener(OnLoginButtonClick);
ExitButton.onClick.RemoveAllListeners();
ExitButton.onClick.AddListener(OnExitButtonClick);
SendTestButton.onClick.RemoveAllListeners();
SendTestButton.onClick.AddListener(() =>
{
OnSendTestButtonClick().Coroutine();
});
GetHaveMailButton.onClick.RemoveAllListeners();
GetHaveMailButton.onClick.AddListener(() =>
{
OnGetHaveMailButtonClick().Coroutine();
});
OpenMailButton.onClick.RemoveAllListeners();
OpenMailButton.onClick.AddListener(() =>
{
OnOpenMailButtonClick().Coroutine();
});
ReceiveMailButton.onClick.RemoveAllListeners();
ReceiveMailButton.onClick.AddListener(() =>
{
OnReceiveMailButtonClick().Coroutine();
});
RemoveMailButton.onClick.RemoveAllListeners();
RemoveMailButton.onClick.AddListener(() =>
{
OnRemoveMailButtonClick().Coroutine();
});
SendMailButton.onClick.RemoveAllListeners();
SendMailButton.onClick.AddListener(() =>
{
OnSendMailButtonClick().Coroutine();
});
StartAsync().Coroutine();
}
private async FTask StartAsync()
{
Fantasy.Platform.Unity.Entry.Initialize(GetType().Assembly);
_scene = await Scene.Create(SceneRuntimeType.MainThread);
}
private void OnLoginButtonClick()
{
// 1、判定用户输入的用户名是否为空如果是空则提示用户输入用户名。
if (string.IsNullOrEmpty(LoginUserName.text))
{
Log.Error("用户名不可以为空!");
return;
}
// 2、首先创建一个连接并且设置连接成功和失败的回调。
_session = _scene.Connect("127.0.0.1:20000", NetworkProtocolType.KCP, () =>
{
Log.Debug("连接成功");
// 首先要判定一下。当前的Session是否被断开或销毁了
if (_session.IsDisposed)
{
return;
}
// 添加一个心跳组件,用来跟服务器保持心跳
_session.AddComponent<SessionHeartbeatComponent>().Start(2000);
// 执行登陆请求
LoginRequest().Coroutine();
}, () =>
{
Log.Debug("连接失败");
}, () =>
{
// 能触发到连接断开的委托的时候只有如下两种情况:
// 1、服务器主动跟客户端断开连接。
// 2、客户端主动跟服务器断开连接。
Log.Debug("断开连接");
}, false, 3000);
}
private void OnApplicationQuit()
{
_scene.Dispose();
}
private async FTask LoginRequest()
{
var userName = LoginUserName.text;
var response = (G2C_LoginResponse)await _session.Call(new C2G_LoginRequest()
{
Name = userName
});
if (response.ErrorCode != 0)
{
Log.Error($"登陆时发生错误。ErrorCode:{response.ErrorCode}");
return;
}
Log.Debug($"登陆成功UserName:{userName}");
}
private void OnExitButtonClick()
{
if (_session == null || _session.IsDisposed)
{
return;
}
_session.Send(new C2G_Exit());
Log.Debug("已经跟服务器发送了断开的协议!");
}
private async FTask OnSendTestButtonClick()
{
var userName = LoginUserName.text;
var response = (Mail2C_TestResponse)await _session.Call(new C2Mail_TestRequest()
{
Tag = userName
});
if (response.ErrorCode != 0)
{
Log.Error($"测试时发生错误。ErrorCode:{response.ErrorCode}");
return;
}
Log.Debug($"接收到服务器发送来的自定义Route协议Tag:{response.Tag}");
}
private async FTask OnGetHaveMailButtonClick()
{
var response = (Mail2C_GetHaveMailResposne)await _session.Call(new C2Mail_GetHaveMailRequest());
if (response.ErrorCode != 0)
{
Log.Error($"获取邮件时发生错误。ErrorCode:{response.ErrorCode}");
return;
}
foreach (var mailSimplifyInfo in response.Mails)
{
MailId.text = mailSimplifyInfo.MailId.ToString();
Log.Debug($"获取到邮件MailId:{mailSimplifyInfo.MailId}MailType:{mailSimplifyInfo.MailType} 标题:{mailSimplifyInfo.Title}");
}
Log.Debug($"获取到邮件数量:{response.Mails.Count}");
}
private async FTask OnOpenMailButtonClick()
{
var response = (Mail2C_OpenMailResposne)await _session.Call(new C2Mail_OpenMailRequest()
{
MailId = long.Parse(MailId.text), ReturnMailInfo = true
});
if (response.ErrorCode != 0)
{
Log.Error($"打开邮件时发生错误。ErrorCode:{response.ErrorCode}");
return;
}
Log.Debug($"打开邮件成功邮件Id:{response.MailInfo.MailId} 标题:{response.MailInfo.Title} 内容:{response.MailInfo.Content}");
}
private async FTask OnReceiveMailButtonClick()
{
var response = (Mail2C_ReceiveMailResponse)await _session.Call(new C2Mail_ReceiveMailRequest()
{
MailId = long.Parse(MailId.text)
});
if (response.ErrorCode != 0)
{
Log.Error($"领取邮件时发生错误。ErrorCode:{response.ErrorCode}");
return;
}
Log.Debug($"领取邮件附件成功");
}
private async FTask OnRemoveMailButtonClick()
{
var response = (Mail2C_RemoveMailResponse)await _session.Call(new C2Mail_RemoveMailRequest()
{
MailId = long.Parse(MailId.text)
});
if (response.ErrorCode != 0)
{
Log.Error($"删除邮件时发生错误。ErrorCode:{response.ErrorCode}");
return;
}
Log.Debug($"删除邮件成功");
}
private async FTask OnSendMailButtonClick()
{
var response = (Mail2C_SendMailResponse)await _session.Call(new C2Mail_SendMailRequest()
{
UserName = MailUserName.text,
Title = MailTitle.text,
Content = MailContent.text,
Money = 100
});
if (response.ErrorCode != 0)
{
Log.Error($"发送邮件时发生错误。ErrorCode:{response.ErrorCode}");
return;
}
Log.Debug($"发送邮件成功");
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9bd17d680f8ff4bee82ecdd82ba4b804
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a9d17c41edd114162bb7a75c4b500bee
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
using Fantasy.Async;
using Fantasy.Network;
using Fantasy.Network.Interface;
namespace Fantasy
{
public class Mail2C_HaveMailHandler : Message<Mail2C_HaveMail>
{
protected override async FTask Run(Session session, Mail2C_HaveMail message)
{
Log.Debug($"Mail2C_HaveMailHandler MailId:{message.Mail.MailId} MailTitle:{message.Mail.Title}");
await FTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dfc2d0255b4844d1ab6a1e67af759c68
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
using Fantasy.Async;
using Fantasy.Network;
using Fantasy.Network.Interface;
namespace Fantasy
{
public class Mail2C_MailStateHandler : Message<Mail2C_MailState>
{
protected override async FTask Run(Session session, Mail2C_MailState message)
{
Log.Debug($"MailId:{message.MailId} MailState:{message.MailState}");
await FTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0e1475a1860bd42f2b62e0fadfbdf21f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8dc09a63f0cb84af3a196d9b71ec47ea
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: e44210ffde5a14530b15db967824df55
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b0d035a3f5e8345ac9577f2089cd91f2
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,515 @@
using ProtoBuf;
using System.Collections.Generic;
using Fantasy;
using Fantasy.Network.Interface;
using Fantasy.Serialize;
#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; }
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: acc26a269baf9426b801a737dc694325
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -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;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 2b692d81b97f74cbab5848e775363a45
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: aac3ea5a9123c4d6998c0dcb3a8981e9
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: