饭太稀
This commit is contained in:
13
Hotfix/Outer/RouteMessage/C2Chat_TestMessageHandler.cs
Normal file
13
Hotfix/Outer/RouteMessage/C2Chat_TestMessageHandler.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class C2Chat_TestMessageHandler : Route<ChatUnit, C2Chat_TestMessage>
|
||||
{
|
||||
protected override async FTask Run(ChatUnit entity, C2Chat_TestMessage message)
|
||||
{
|
||||
Log.Debug($"C2Chat_TestMessageHandler.c2Chat_TestMessage: {message}");
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class C2Chat_TestMessageRequestHandler : RouteRPC<ChatUnit, C2Chat_TestMessageRequest, Chat2C_TestMessageResponse>
|
||||
{
|
||||
protected override async FTask Run(ChatUnit entity, C2Chat_TestMessageRequest request, Chat2C_TestMessageResponse response, Action reply)
|
||||
{
|
||||
Log.Debug($"C2Chat_TestMessageRequestHandler request = {request}");
|
||||
response.Tag = "Hello RouteRPC";
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network.Interface;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class C2Chat_TestRequestPushMessageHandler : Route<ChatUnit, C2Chat_TestRequestPushMessage>
|
||||
{
|
||||
protected override async FTask Run(ChatUnit chatUnit, C2Chat_TestRequestPushMessage message)
|
||||
{
|
||||
// 因为没有服务器的相关的逻辑,所以制作了一个协议来触发服务器发送消息给客户端的环境。
|
||||
// 使用当前Scene.NetworkMessagingComponent.SendInnerRoute发送消息给客户端。
|
||||
// 只需要把消息发送给创建链接的Gate上就会自动转发消息到客户端上。
|
||||
// 因为chatUnit.GateRouteId是在G2Chat_CreateRouteRequestHandler方法里记录的所以直接使用这个就可以了。
|
||||
|
||||
chatUnit.Scene.NetworkMessagingComponent.SendInnerRoute(chatUnit.GateRouteId, new Chat2C_PushMessage()
|
||||
{
|
||||
Tag = "Hi Route Chat2C_PushMessage"
|
||||
});
|
||||
|
||||
await FTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using Fantasy.Async;
|
||||
using Fantasy.Network;
|
||||
using Fantasy.Network.Interface;
|
||||
using Fantasy.Platform.Net;
|
||||
|
||||
namespace Fantasy;
|
||||
|
||||
public sealed class C2G_CreateChatRouteRequestHandler : MessageRPC<C2G_CreateChatRouteRequest, G2C_CreateChatRouteResponse>
|
||||
{
|
||||
protected override async FTask Run(Session session, C2G_CreateChatRouteRequest request, G2C_CreateChatRouteResponse response, Action reply)
|
||||
{
|
||||
// 首先需要找到一个需要建立Route的Scene的SceneConfig。
|
||||
// 例子演示的连接的ChatScene,所以这里我通过SceneConfigData拿到这个SceneConfig。
|
||||
// 如果是其他Scene,用法跟这个没有任何区别。
|
||||
var chatSceneConfig = SceneConfigData.Instance.GetSceneBySceneType(SceneType.Chat)[0];
|
||||
// 通过chatSceneConfig拿到这个Scene的RouteId
|
||||
var chatRouteId = chatSceneConfig.RouteId;
|
||||
// 通过Scene拿到当前Scene的NetworkMessagingComponent。
|
||||
// NetworkMessagingComponent是服务器之间通讯的唯一手段。
|
||||
var networkMessagingComponent = session.Scene.NetworkMessagingComponent;
|
||||
// 通过CallInnerRoute方法发送一个RPC消息给ChatScene上。
|
||||
// 任何一个实体的RunTimeId都可以做为RouteId使用。
|
||||
// 所以这个传递了一个session.RunTimeId,是方便Chat发送消息回Gate上。
|
||||
var routeResponse = (Chat2G_CreateRouteResponse)await networkMessagingComponent.CallInnerRoute(chatRouteId,
|
||||
new G2Chat_CreateRouteRequest()
|
||||
{
|
||||
GateRouteId = session.RouteId
|
||||
});
|
||||
if (routeResponse.ErrorCode != 0)
|
||||
{
|
||||
// 如果ErrorCode不是0表示请求的协议发生错误,应该提示给客户端。
|
||||
// 这里就不做这个了。
|
||||
return;
|
||||
}
|
||||
// 要实现Route协议的转发,需要给Session添加一个RouteComponent,这个非常重要。
|
||||
var routeComponent = session.AddComponent<RouteComponent>();
|
||||
// 需要再Examples/Config/NetworkProtocol/RouteType.Config里添加一个ChatRoute
|
||||
// 然后点击导表工具,会自动生成一个RouteType.cs文件。
|
||||
// 使用你定义的ChatRoute当routeType的参数传递进去。
|
||||
// routeResponse会返回一个ChatRouteId,这个就是Chat的RouteId。
|
||||
routeComponent.AddAddress((int)RouteType.ChatRoute,routeResponse.ChatRouteId);
|
||||
// 这些操作完成后,就完成了Route消息的建立。
|
||||
// 后面可以直接发送Route消息通过Gate自动中转给Chat了。
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user