/// <summary> /// Route a RMI request to the host with the target node /// </summary> /// <param name="rmi"></param> /// <param name="destoNode"> </param> public void RouteRMIRequest(NodeRMI rmi, NodeInfo destoNode) { if(destoNode.HostID.Length == 1) { rmi.SerializeReturnValue(destoNode.RMIResolvedType.GetMethod(rmi.MethodName).Invoke(controller, rmi.DeserializeArguments())); RouteRMIResponse(rmi); return; } var destoHost = HostCache.FindHost(destoNode.HostID); SendTo(destoHost.Info, destoHost.BuildMessage(MessageIdentifier.RMIInvoke, rmi.Serialize())); }
/// <summary> /// Route a RMI response to the host. /// </summary> /// <param name="rmi"></param> public void RouteRMIResponse(NodeRMI rmi) { var target = NodePool.Instance.NodeForId(rmi.SNodeID); if(target == null) { log.Debug("RMI response "+rmi.RequestID+" dropped as the initiator doesn't exist anymore."); return; } var targetHost = HostCache.FindHost(target.HostID); SendTo(targetHost.Info, targetHost.BuildMessage(MessageIdentifier.RMIResponse, rmi.Serialize())); }