/// <summary> /// 从当前Actor发送消息给另一个Actor /// </summary> /// <typeparam name="TActorMessage"></typeparam> /// <param name="actor"></param> /// <param name="message"></param> /// <param name="command"></param> public static void SendActor <TActorMessage>(this TActorMessage message, MSGCommand command) where TActorMessage : IActorMessage { Game.Scene.GetComponent <ActorComponentStorage>().SendActor(message, command); }
/// <summary> /// 请求一条Actor消息 /// </summary> /// <typeparam name="TActorResponse"></typeparam> /// <param name="actor"></param> /// <param name="message"></param> /// <param name="command"></param> /// <returns></returns> public static async Task <TActorResponse> CallActor <TActorResponse>(this IActorMessage message, MSGCommand command) where TActorResponse : IActorMessage { return(await Game.Scene.GetComponent <ActorComponentStorage>().CallActor <TActorResponse>(message, command)); }
/// <summary> /// 从当前Actor发送消息给另一个Actor /// </summary> /// <typeparam name="TActorMessage"></typeparam> /// <param name="actor"></param> /// <param name="message"></param> /// <param name="command"></param> internal static void SendActor <TActorMessage>(this BaseActorComponent actor, TActorMessage message, MSGCommand command) where TActorMessage : IActorMessage { if (actor.IsLocalActor) { actor.ReceiveMessage(message, command); } else { var localActorId = message.ActorId; //需要使用远程进程的ActorId发送 message.ActorId = actor.ActorEntity.ActorId; actor.ActorEntity.Network.Send(message, (ushort)command); message.ActorId = localActorId; } }
/// <summary> /// 请求一条Actor消息 /// </summary> /// <typeparam name="TActorRequest"></typeparam> /// <param name="actor"></param> /// <param name="message"></param> /// <param name="command"></param> /// <returns></returns> internal static async Task <TActorResponse> CallActor <TActorResponse>(this BaseActorComponent actor, IActorMessage message, MSGCommand command) where TActorResponse : IActorMessage { TActorResponse response = default; if (actor.IsLocalActor) { response = (TActorResponse)actor.ReceiveRpcMessage(message, command); } else { var localActorId = message.ActorId; //需要使用远程进程的ActorId发送 message.ActorId = actor.ActorEntity.ActorId; response = await actor.ActorEntity.Network.CallMessageAsync <TActorResponse>(message, (ushort)command); message.ActorId = localActorId; } return(response); }
/// <summary> /// 发送当前Actor到指定的Network连接服务。 /// </summary> /// <param name="actor">Actor类</param> /// <param name="network">网络类</param> /// <param name="command">消息指令</param> internal static void SendMySelf(this BaseActorComponent actor, Network network, MSGCommand command) { if (!actor.IsLocalActor) { throw new ComponentException("非LocalActor不能发送ActorMySelf消息。"); } var syncMessage = new ActorSyncMessage { ActorId = actor.Id, ActorType = actor.ActorEntity.ActorType, }; network.Send(syncMessage, (ushort)command); }
public override IActorMessage ReceiveRpcMessage(IActorMessage message, MSGCommand command) { throw new System.NotImplementedException(); }
private void button12_Click(object sender, EventArgs e) { MSGCommand msgc = new MSGCommand(); msgc.Start(scriptBaseForm); }
/// <summary> /// 请求一条Actor消息 /// </summary> /// <typeparam name="TActorResponse"></typeparam> /// <param name="actor"></param> /// <param name="message"></param> /// <param name="command"></param> /// <returns></returns> internal static async Task <TActorResponse> CallActor <TActorResponse>(this ActorComponentStorage current, IActorMessage message, MSGCommand command) where TActorResponse : IActorMessage { var actor = current.GetActor(message.ActorId); if (actor != null) { return(default);
/// <summary> /// 从当前Actor发送消息给另一个Actor /// </summary> /// <typeparam name="TActorMessage"></typeparam> /// <param name="actor"></param> /// <param name="message"></param> /// <param name="command"></param> internal static void SendActor <TActorMessage>(this ActorComponentStorage current, TActorMessage message, MSGCommand command) where TActorMessage : IActorMessage { var actor = current.GetActor(message.ActorId); if (actor != null) { actor.SendActor(message, command); } }