public async void Dispatch(Session session, Opcode opcode, int offset, byte[] messageBytes, AMessage message) { // gate session收到actor消息直接转发给actor自己去处理 if (message is AActorMessage) { long unitId = session.GetComponent <SessionPlayerComponent>().Player.mBaseInfo.roleId; ActorProxy actorProxy = Game.Scene.GetComponent <ActorProxyComponent>().Get(unitId); actorProxy.Send(message); return; } // gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端 if (message is AActorRequest aActorRequest) { long unitId = session.GetComponent <SessionPlayerComponent>().Player.mBaseInfo.roleId; ActorProxy actorProxy = Game.Scene.GetComponent <ActorProxyComponent>().Get(unitId); uint rpcId = aActorRequest.RpcId; AResponse response = await actorProxy.Call <AResponse>(aActorRequest); response.RpcId = rpcId; session.Reply(response); return; } if (message != null) { Game.Scene.GetComponent <MessageDispatherComponent>().Handle(session, message); return; } throw new Exception($"message type error: {message.GetType().FullName}"); }
public void Publish(AMessage msg) { List<IVSPCMessageHandler> filteredHandlers; if (messageHandlers.TryGetValue(msg.GetType(), out filteredHandlers)) { filteredHandlers.ForEach(h => h.HandleMessage(msg, context)); } }
public void Publish(AMessage msg) { List <IVSPCMessageHandler> filteredHandlers; if (messageHandlers.TryGetValue(msg.GetType(), out filteredHandlers)) { filteredHandlers.ForEach(h => h.HandleMessage(msg, context)); } }
public void Handle(AMessage msg) { Message message = msg as Message; if (message == null) { Log.Error($"消息类型转换错误: {msg.GetType().Name} to {typeof(Message).Name}"); } this.Run(message); }
public void Dispatch(Session session, ushort opcode, int offset, byte[] messageBytes, AMessage message) { // 收到actor rpc request if (message is ActorRpcRequest actorRpcRequest) { Entity entity = Game.Scene.GetComponent <ActorManagerComponent>().Get(actorRpcRequest.Id); if (entity == null) { Log.Warning($"not found actor: {actorRpcRequest.Id}"); ActorRpcResponse response = new ActorRpcResponse { RpcId = actorRpcRequest.RpcId, Error = ErrorCode.ERR_NotFoundActor }; session.Reply(response); return; } entity.GetComponent <ActorComponent>().Add(new ActorMessageInfo() { Session = session, Message = actorRpcRequest }); return; } // 收到actor消息分发给actor自己去处理 if (message is ActorRequest actorRequest) { Entity entity = Game.Scene.GetComponent <ActorManagerComponent>().Get(actorRequest.Id); if (entity == null) { Log.Warning($"not found actor: {actorRequest.Id}"); ActorResponse response = new ActorResponse { RpcId = actorRequest.RpcId, Error = ErrorCode.ERR_NotFoundActor }; session.Reply(response); return; } entity.GetComponent <ActorComponent>().Add(new ActorMessageInfo() { Session = session, Message = actorRequest }); return; } if (message is AMessage || message is ARequest) { Game.Scene.GetComponent <MessageDispatherComponent>().Handle(session, message); return; } throw new Exception($"message type error: {message.GetType().FullName}"); }
public override void HandleMessage(AMessage message, VSPCContext context) { if (message is UserClickedLoginMessage) Connect((UserClickedLoginMessage)message, context); else if (message is UserClickedLogoffMessage) Disconnect((UserClickedLogoffMessage)message, context); else if (message is PositionReportMessage) SendPositionReportToFSDServer((PositionReportMessage)message, context); else if (message is ErrorMessage) Logger.Error("FSD Error received: {0} {1} {2}", ((ErrorMessage)message).ErrorCode, ((ErrorMessage)message).ErrorInfo, ((ErrorMessage)message).ErrorText); else if (message is VSPC.Core.Messages.FLSIM.FlightsimConnectedMessage) context.FlightsimIsConnected = true; else if (message is VSPC.Core.Messages.FLSIM.FlightsimDisconnectedMessage) context.FlightsimIsConnected = false; else if (message is TextMessageSend) SendTextMessage((TextMessageSend)message); else Logger.Error("Unexpected message type received in FSDMessageHandler: " + message.GetType().Name); }
public AMessage GetResponse(AMessage message) { if (message == null) { return(null); } AMessage result = null; switch (message.Id) { // ---- Call ---- case MessageId.CallRequest: CallRequest callRequest = (CallRequest)message; result = callHandler.HandleCallRequest(callRequest); if (result == null) { lock (sync) { // Add the call request to the queue pendingRequests.Add(callRequest); } // Send a method info request MethodInfoRequest methodInfoRequest = new MethodInfoRequest(); methodInfoRequest.MethodInfoId = callRequest.MethodInfoId; result = methodInfoRequest; } break; case MessageId.CallAnswer: callHandler.HandleCallAnswer((CallAnswer)message); break; // ---- MethodInfo ---- case MessageId.MethodInfoRequest: result = callHandler.HandleMethodInfoRequest((MethodInfoRequest)message); break; case MessageId.MethodInfoAnswer: MethodInfoAnswer methodInfoAnswer = (MethodInfoAnswer)message; callHandler.HandleMethodInfoAnswer(methodInfoAnswer); CallRequest pendingCallRequest = null; lock (sync) { for (int i = 0; i < pendingRequests.Count; i++) { if (pendingRequests[i].MethodInfoId == methodInfoAnswer.MethodInfoId) { // We got the answer for a method info pendingCallRequest = pendingRequests[i]; pendingRequests.RemoveAt(i); } } } if (pendingCallRequest != null) { result = callHandler.HandleCallRequest(pendingCallRequest); } break; // ---- ConnectionInfo ---- case MessageId.ConnectionInfoRequest: result = HandleConnectionInfoRequest((ConnectionInfoRequest)message); break; case MessageId.ConnectionInfoAnswer: HandleConnectionInfoAnswer((ConnectionInfoAnswer)message); break; default: string errorMsg = string.Format("Messages of Id={0} and type={1} are not supported", message.Id, message.GetType()); throw new NotSupportedException(errorMsg); } return(result); }
public override void HandleMessage(AMessage message, VSPCContext context) { if (message is UserClickedLoginMessage) { Connect((UserClickedLoginMessage)message, context); } else if (message is UserClickedLogoffMessage) { Disconnect((UserClickedLogoffMessage)message, context); } else if (message is PositionReportMessage) { SendPositionReportToFSDServer((PositionReportMessage)message, context); } else if (message is ErrorMessage) { Logger.Error("FSD Error received: {0} {1} {2}", ((ErrorMessage)message).ErrorCode, ((ErrorMessage)message).ErrorInfo, ((ErrorMessage)message).ErrorText); } else if (message is VSPC.Core.Messages.FLSIM.FlightsimConnectedMessage) { context.FlightsimIsConnected = true; } else if (message is VSPC.Core.Messages.FLSIM.FlightsimDisconnectedMessage) { context.FlightsimIsConnected = false; } else if (message is TextMessageSend) { SendTextMessage((TextMessageSend)message); } else { Logger.Error("Unexpected message type received in FSDMessageHandler: " + message.GetType().Name); } }