using System;
using System.Threading.Tasks;
using ETModel;
namespace ETHotfix
{
///
/// gate session收到的消息直接转发给客户端
///
public class GateSessionEntityActorHandler : IEntityActorHandler
{
public async Task Handle(Session session, Entity entity, IActorMessage actorMessage)
{
ActorResponse actorResponse = new ActorResponse
{
RpcId = actorMessage.RpcId
};
try
{
// 发送给客户端
Session clientSession = entity as Session;
clientSession.Send(actorMessage);
session.Reply(actorResponse);
await Task.CompletedTask;
}
catch (Exception e)
{
actorResponse.Error = ErrorCode.ERR_SessionActorError;
actorResponse.Message = $"session actor error {e}";
session.Reply(actorResponse);
throw;
}
}
}
public class CommonEntityActorHandler : IEntityActorHandler
{
public async Task Handle(Session session, Entity entity, IActorMessage actorMessage)
{
await Game.Scene.GetComponent().Handle(session, entity, actorMessage);
}
}
///
/// 玩家收到帧同步消息交给帧同步组件处理
///
public class MapUnitEntityActorHandler : IEntityActorHandler
{
public async Task Handle(Session session, Entity entity, IActorMessage actorMessage)
{
if (actorMessage is OneFrameMessage aFrameMessage)
{
Game.Scene.GetComponent().Add(aFrameMessage);
ActorResponse actorResponse = new ActorResponse
{
RpcId = actorMessage.RpcId
};
session.Reply(actorResponse);
return;
}
await Game.Scene.GetComponent().Handle(session, entity, actorMessage);
}
}
}