饭太稀

This commit is contained in:
bob
2025-06-30 10:51:37 +08:00
commit 8e45469c83
753 changed files with 87652 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
using Fantasy.Async;
using Fantasy.Network;
using Fantasy.Network.Interface;
using Fantasy.Network.Roaming;
using Fantasy.Platform.Net;
using Fantasy.Roaming;
namespace Fantasy;
public sealed class C2G_ConnectRoamingRequestHandler : MessageRPC<C2G_ConnectRoamingRequest, G2C_ConnectRoamingResponse>
{
protected override async FTask Run(Session session, C2G_ConnectRoamingRequest request, G2C_ConnectRoamingResponse response, Action reply)
{
// 给session创建一个漫游功能。
// 这个功能很重要这个组件是整个Roaming系统最核心的组件这个组件会处理Roaming协议
// 这个功能会处理Roaming协议所以创建这个是必须的。
// CreateRoaming需要支持三个参数:
// roamingId:这个参数是RoamingIdRoamingId是Roaming的唯一标识不能重复。
// 指定了这个RoamingId后服务器其他漫游终端的Id会是你设置的RoamingId。
// 这样操作方便统一管理漫游协议。
// 一般这个RoamingId是一个角色的Id这样方便管理。
// isAutoDispose:是否在Session断开的时候自动断开漫游功能。
// delayRemove:如果开启了自定断开漫游功能需要设置一个延迟多久执行断开。
// 这里没有角色的Id所以这里使用1来代替。
// isAutoDispose我选择自动断开这个断开的时机是Session断开后执行。
// delayRemove断开漫游功能后Session会自动断开所以这里设置延迟1000毫秒执行断开。
// 这里创建的漫游功能会自动处理Roaming协议所以不需要手动处理Roaming协议。
var roaming = session.CreateRoaming(1,true,1000);
// 通过SceneConfigData.Instance.GetSceneBySceneType(SceneType.Map)[0]拿到Map场景的配置信息
// 如果需要协议漫游其他Scene可以在配置中查找要漫游的服务器。
// 可以同时漫游多个Scene但每个Scene的漫游都有一个固定的类型不能重复。
var mapConfig = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Map)[0];
// 通过RoamingComponent.Link(session, mapConfig, 1, 1)链接Map场景
// 第一个参数是Session第二个参数是Map场景的配置信息第三个参数是Map场景的RouteId第四个参数是Map场景的RoamingType。
// 这个RoamingType是通过RoamingType.Config文件中定义的。
// RouteType.Config文件位置在你定义的网络文件协议文件夹下。如果找不到RoamingType.Config文件可以运行下导出协议工具导出一个协议后会自动创建。
// 该示例工程下文件位置在Config/NetworkProtocol/RoamingType.Config
// 执行完后漫游会自动把Session绑定到Map场景上。
// 后面发送该类型的消息到Session上会自动转发给Map场景。
var linkResponse = await roaming.Link(session, mapConfig, RoamingType.MapRoamingType);
if (linkResponse != 0)
{
response.ErrorCode = linkResponse;
return;
}
// 同样你可以创建多个漫游的场景但每个场景的RouteId和RoamingType不能重复。
// 这里创建Chat场景的漫游。
var chatConfig = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Chat)[0];
linkResponse = await roaming.Link(session, chatConfig, RoamingType.ChatRoamingType);
if (linkResponse != 0)
{
response.ErrorCode = linkResponse;
return;
}
// 如果你觉的每次创建一个场景的漫游都麻烦你可以利用RoamingType.RoamingTypes遍历创建。
// 但这样的会把你在RoamingType.Config定义的都创建出来
foreach (var roamingType in RoamingType.RoamingTypes)
{
// 这里添加roaming.Link的方法进行创建。
}
}
}