CTT/Server/Hotfix/Demo/MessageHelper.cs

80 lines
2.6 KiB
C#

using System.Collections.Generic;
using System.Diagnostics;
namespace ET
{
public static class MessageHelper
{
public static void Broadcast(IEnumerable<Unit> mineTeam, IEnumerable<Unit> targetTeam, IActorMessage message)
{
if (mineTeam != null)
foreach (Unit unit in mineTeam)
{
SendActor(unit, message);
}
if (targetTeam != null)
foreach (Unit unit in targetTeam)
{
SendActor(unit, message);
}
}
/// <summary>
/// 发送协议给ActorLocation
/// </summary>
/// <param name="id">注册Actor的Id</param>
/// <param name="message"></param>
public static void SendToLocationActor(long id, IActorLocationMessage message)
{
ActorLocationSenderComponent.Instance.Send(id, message);
}
/// <summary>
/// 发送协议给Actor
/// </summary>
/// <param name="actorId">注册Actor的InstanceId</param>
/// <param name="message"></param>
public static void SendActor(long actorId, IActorMessage message)
{
ActorMessageSenderComponent.Instance.Send(actorId, message);
}
public static void SendActor(Unit unit, IActorMessage message)
{
if (!unit)
{
Log.Error($"unit Id = {unit?.Id} is Disposed ");
return;
}
if (unit.IsOffline)
{
return;
}
UserGateComponent gate = unit.GetComponent<UserGateComponent>();
if (gate == null) return;
SendActor(unit.GetComponent<UserGateComponent>().GateSessionActorId, message);
}
/// <summary>
/// 发送RPC协议给Actor
/// </summary>
/// <param name="actorId">注册Actor的InstanceId</param>
/// <param name="message"></param>
/// <returns></returns>
public static async ETTask<IActorResponse> CallActor(long actorId, IActorRequest message)
{
return await ActorMessageSenderComponent.Instance.Call(actorId, message);
}
/// <summary>
/// 发送RPC协议给ActorLocation
/// </summary>
/// <param name="id">注册Actor的Id</param>
/// <param name="message"></param>
/// <returns></returns>
public static async ETTask<IActorResponse> CallLocationActor(long id, IActorLocationRequest message)
{
return await ActorLocationSenderComponent.Instance.Call(id, message);
}
}
}