80 lines
2.6 KiB
C#
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 (var unit in mineTeam)
|
|
{
|
|
SendActor(unit, message);
|
|
}
|
|
if (targetTeam != null)
|
|
foreach (var 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;
|
|
}
|
|
var 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);
|
|
}
|
|
}
|
|
} |