private async ETVoid HandleIActorRequest(Session session, IActorRequest message) { using (await CoroutineLockComponent.Instance.Wait(message.ActorId)) { Entity entity = (Entity)Game.EventSystem.Get(message.ActorId); if (entity == null) { Log.Warning($"not found actor: {message}"); ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_NotFoundActor, RpcId = message.RpcId }; session.Reply(response); return; } MailBoxComponent mailBoxComponent = entity.GetComponent <MailBoxComponent>(); if (mailBoxComponent == null) { ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_ActorNoMailBoxComponent, RpcId = message.RpcId }; session.Reply(response); Log.Error($"actor not add MailBoxComponent: {entity.GetType().Name} {message}"); return; } await mailBoxComponent.Add(session, message); } }
public void Dispatch(Session session, Packet packet) { IMessage message; try { Type messageType = Game.Scene.GetComponent <OpcodeTypeComponent>().GetType(packet.Opcode); message = (IMessage)session.Network.MessagePacker.DeserializeFrom(messageType, packet.Stream); } catch (Exception e) { // 出现任何解析消息异常都要断开Session,防止客户端伪造消息 Log.Error(e); session.Error = ErrorCode.ERR_PacketParserError; session.Network.Remove(session.Id); return; } // 收到actor消息,放入actor队列 if (message is IActorMessage iActorMessage) { Entity entity = (Entity)Game.EventSystem.Get(iActorMessage.ActorId); if (entity == null) { Log.Warning($"not found actor: {iActorMessage.ActorId}"); ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_NotFoundActor, RpcId = iActorMessage.RpcId }; session.Reply(response); return; } MailBoxComponent mailBoxComponent = entity.GetComponent <MailBoxComponent>(); if (mailBoxComponent == null) { ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_ActorNoMailBoxComponent, RpcId = iActorMessage.RpcId }; session.Reply(response); Log.Error($"actor没有挂载MailBoxComponent组件: {entity.GetType().Name} {entity.Id}"); return; } mailBoxComponent.Add(new ActorMessageInfo() { Session = session, Message = iActorMessage }); return; } Game.Scene.GetComponent <MessageDispatherComponent>().Handle(session, new MessageInfo(packet.Opcode, message)); }
public void Dispatch(Session session, Packet packet) { ushort opcode = packet.Opcode; Type messageType = Game.Scene.GetComponent <OpcodeTypeComponent>().GetType(opcode); IMessage message = (IMessage)session.Network.MessagePacker.DeserializeFrom(messageType, packet.Bytes, Packet.Index, packet.Length - Packet.Index); // 收到actor消息,放入actor队列 if (message is IActorLanuch iActorLaunch) { Entity entity = (Entity)Game.EventSystem.Get(iActorLaunch.ActorId); if (entity == null) { Log.Warning($"not found actor: {iActorLaunch.ActorId}"); ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_NotFoundActor, RpcId = iActorLaunch.RpcId }; session.Reply(response); return; } MailBoxComponent mailBoxComponent = entity.GetComponent <MailBoxComponent>(); if (mailBoxComponent == null) { ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_ActorNoActorComponent, RpcId = iActorLaunch.RpcId }; session.Reply(response); Log.Error($"actor没有挂载ActorComponent组件: {entity.GetType().Name} {entity.Id}"); return; } mailBoxComponent.Add(new ActorMessageInfo() { Session = session, Launch = iActorLaunch }); return; } Game.Scene.GetComponent <MessageDispatherComponent>().Handle(session, new MessageInfo(opcode, message)); }
private async ETVoid HandleIActorMessage(Session session, IActorMessage message) { using (await CoroutineLockComponent.Instance.Wait(message.ActorId)) { Entity entity = (Entity)Game.EventSystem.Get(message.ActorId); if (entity == null) { Log.Error($"not found actor: {message}"); return; } MailBoxComponent mailBoxComponent = entity.GetComponent <MailBoxComponent>(); if (mailBoxComponent == null) { Log.Error($"actor not add MailBoxComponent: {entity.GetType().Name} {message}"); return; } await mailBoxComponent.Add(session, message); } }
public void Dispatch(Session session, ushort opcode, object message) { // 收到actor消息,放入actor队列 if (message is IActorMessage iActorMessage) { Entity entity = (Entity)Game.EventSystem.Get(iActorMessage.ActorId); if (entity == null) { Log.Warning($"not found actor: {iActorMessage.ActorId}"); ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_NotFoundActor, RpcId = iActorMessage.RpcId }; session.Reply(response); return; } MailBoxComponent mailBoxComponent = entity.GetComponent <MailBoxComponent>(); if (mailBoxComponent == null) { ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_ActorNoMailBoxComponent, RpcId = iActorMessage.RpcId }; session.Reply(response); Log.Error($"actor没有挂载MailBoxComponent组件: {entity.GetType().Name} {entity.Id}"); return; } mailBoxComponent.Add(new ActorMessageInfo() { Session = session, Message = iActorMessage }); return; } Game.Scene.GetComponent <MessageDispatherComponent>().Handle(session, new MessageInfo(opcode, message)); }
public void Dispatch(Session session, ushort opcode, object message) { // 收到actor消息,放入actor队列 switch (message) { case IActorRequest iActorRequest: { Entity entity = (Entity)Game.EventSystem.Get(iActorRequest.ActorId); if (entity == null) { Log.Warning($"not found actor: {message}"); ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_NotFoundActor, RpcId = iActorRequest.RpcId }; session.Reply(response); return; } MailBoxComponent mailBoxComponent = entity.GetComponent <MailBoxComponent>(); if (mailBoxComponent == null) { ActorResponse response = new ActorResponse { Error = ErrorCode.ERR_ActorNoMailBoxComponent, RpcId = iActorRequest.RpcId }; session.Reply(response); Log.Error($"actor not add MailBoxComponent: {entity.GetType().Name} {message}"); return; } mailBoxComponent.Add(new ActorMessageInfo() { Session = session, Message = iActorRequest }); return; } case IActorMessage iactorMessage: { Entity entity = (Entity)Game.EventSystem.Get(iactorMessage.ActorId); if (entity == null) { return; } //if (entity == null) //{ // Log.Error($"not found actor: {message}"); // return; //} MailBoxComponent mailBoxComponent = entity.GetComponent <MailBoxComponent>(); if (mailBoxComponent == null) { Log.Error($"actor not add MailBoxComponent: {entity.GetType().Name} {message}"); return; } mailBoxComponent.Add(new ActorMessageInfo() { Session = session, Message = iactorMessage }); return; } default: { Game.Scene.GetComponent <MessageDispatcherComponent>().Handle(session, new MessageInfo(opcode, message)); break; } } }