private ParameterInfo findSystemParam(ParameterInfo[] parameterArray, RhspParameter rhspParam) { ParameterInfo param = null; foreach (ParameterInfo checkParam in parameterArray) { if (checkParam.Name == rhspParam.Name) { param = checkParam; break; } } return(param); }
private bool methodHasParamName(MethodInfo method, RhspParameter rhspParam) { bool hasName = false; foreach (ParameterInfo systemParam in method.GetParameters()) { if (systemParam.Name == rhspParam.Name) { hasName = true; break; } } return(hasName); }
private RhspCommandResponse getCommandResponse(RhspCommandCarrier carrier) { RhspCommandResponse response = new RhspCommandResponse(); string[] ctParts = carrier.Command.CommandText.Split('.'); if (ctParts.Length != 2) { throw new RhspException( "Unable to process command because it is not in " + "the correct format (ModuleName.MethodName)."); } string moduleName = ctParts[0]; string methodName = ctParts[1]; if (!moduleManagerTable.ContainsKey(moduleName)) { throw new RhspException( "Unable to process command because the module " + "name '" + moduleName + "' was not recognised."); } Type managerType = moduleManagerTable[moduleName]; RhspManager manager; if (managerType == typeof(HostingConfigManager)) { // Ensure that only one hosting config is used. manager = service.Context.HostingConfig; } else if (managerType == typeof(ServerConfigManager)) { // Ensure that only one server config is used. manager = service.Context.ServerConfig; } else { manager = RhspManager.CreateManager( service.Context, managerType); } MethodInfo methodInfo = getModuleMethod( manager, methodName, carrier.Command.Parameters); ParameterInfo[] systemParamArray = methodInfo.GetParameters(); object[] methodValueArray = new object[systemParamArray.Length]; foreach (ParameterInfo systemParam in systemParamArray) { RhspParameter rhspParam = carrier.Command.Parameters[systemParam.Name]; if (!systemParam.ParameterType.IsAssignableFrom(rhspParam.Value.GetType())) { throw new RhspException( "The data type '" + systemParam.ParameterType.Name + "' " + "of system parameter with name '" + systemParam.Name + "' " + "is not compatible with the equivilent command parameter " + "of type '" + rhspParam.Value.GetType().Name + "'."); } // Assign the value to the correct position so it matches the signature. methodValueArray[systemParam.Position] = rhspParam.Value; } // Call method using manager so that apropriate events are fired. response.SetData(manager.InvokeMethod(methodInfo, methodValueArray)); // Save both configs regardless of if changes have been made. // TODO: Only save if changes actually have been made. service.Context.HostingConfig.Save(); service.Context.ServerConfig.Save(); return(response); }