예제 #1
0
 /// <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);
 }
예제 #2
0
 /// <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));
 }
예제 #3
0
        /// <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;
            }
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
 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);
            }
        }