private void NewModule() { string name; int i = 1; name = "MODULE"; while (modules.ContainsKey(name + i.ToString().PadLeft(2, '0')) && (i < 99)) { ++i; } if (modules.ContainsKey(name)) { return; } ModuleClientTcp module = new ModuleClientTcp(name, IPAddress.Loopback, 2000); modules.Add(module.Name, module); ConfigurationHelper.Blackboard.Modules.Add(module); lstBBModules.Items.Add(module); lstBBModules.SelectedItem = module; }
/// <summary> /// Creates a module using data contained in a xml module /// </summary> /// <param name="blackboard">The blackboard which will contain the module</param> /// <param name="xmlModuleNode">Xml node used to fetch the required module information.</param> /// <param name="log">The log writer</param> /// <returns>The module created with the data contained in the xml document</returns> private static ModuleClient CreateModule(Blackboard blackboard, XmlNode xmlModuleNode, ILogWriter log) { XmlDocument tmpDoc; XmlNode node; ModuleClient mod; string moduleName; bool moduleEnabled; string moduleAlias; bool aliveCheck; bool requirePrefix; int sendDelay; bool simulate; double simulationSuccessRatio; ModuleSimulationOptions simOptions; string processName; string programPath; string programArgs; List<IPAddress> ips; int port; int checkInterval; // Enabled moduleEnabled = true; if ((xmlModuleNode.Attributes["enabled"] != null) && Boolean.TryParse(xmlModuleNode.Attributes["enabled"].Value, out moduleEnabled) && !moduleEnabled) return null; moduleName = xmlModuleNode.Attributes["name"].Value.ToUpper(); // Alias if (xmlModuleNode.Attributes["alias"] != null) moduleAlias = xmlModuleNode.Attributes["alias"].Value; else moduleAlias = moduleName; log.WriteLine(1, "Loading module " + moduleName + (moduleAlias != moduleName ? " alias " + moduleAlias : "")); // Create a XML sub-document XML tmpDoc = new XmlDocument(); tmpDoc.LoadXml(xmlModuleNode.OuterXml); #region Get program path and program arguments FetchProgramInfo(tmpDoc, out processName, out programPath, out programArgs); #endregion // Leo el comando de inicio //if (tmpDoc.GetElementsByTagName("startupCommand").Count != 0) // startupMessage = Command.Parse(tmpDoc.GetElementsByTagName("startupCommand")[0].InnerText); // Get the array of ip addresses where the module can be ips = FetchIpAddresses(tmpDoc); if ((ips == null) || (ips.Count < 1)) { log.WriteLine(2, "\tNo valid IP Address provided"); log.WriteLine(1, "Module skipped"); return null; } // Leo el puerto de conexion del modulo if ( (tmpDoc.GetElementsByTagName("port").Count == 0) || !Int32.TryParse(tmpDoc.GetElementsByTagName("port")[0].InnerText, out port) || (port <= 1024)) { log.WriteLine(2, "\tInvalid port"); log.WriteLine(1, "Module skipped"); return null; } log.WriteLine("\t" + ips[0].ToString() + ":" + port); // Veify if Blackbard must check Module's alive status checkInterval = ModuleClient.GlobalCheckInterval; if (tmpDoc.GetElementsByTagName("aliveCheck").Count != 0) { node = tmpDoc.GetElementsByTagName("aliveCheck")[0]; if (!Boolean.TryParse(node.InnerText, out aliveCheck)) aliveCheck = true; // Read alive/busy/ready check interval if ((node.Attributes["interval"] == null) || !Int32.TryParse(node.Attributes["interval"].InnerText, out checkInterval) || (checkInterval < ModuleClient.MinCheckInterval) || (checkInterval > ModuleClient.MaxCheckInterval)) checkInterval = ModuleClient.GlobalCheckInterval; } else aliveCheck = true; // Verify if the Module requires SOURCE DESTINATION prefix if ( (tmpDoc.GetElementsByTagName("requirePrefix").Count == 0) || !Boolean.TryParse(tmpDoc.GetElementsByTagName("requirePrefix")[0].InnerText, out requirePrefix) ) requirePrefix = false; // Delay between send operations if ( (tmpDoc.GetElementsByTagName("sendDelay").Count == 0) || !Int32.TryParse(tmpDoc.GetElementsByTagName("sendDelay")[0].InnerText, out sendDelay) ) sendDelay = -1; // Simulation options simOptions = ModuleSimulationOptions.SimulationDisabled; if (tmpDoc.GetElementsByTagName("simulate").Count != 0) { node = tmpDoc.GetElementsByTagName("simulate")[0]; simulationSuccessRatio = -1; if ((node.Attributes["successRatio"] == null) || !Double.TryParse(node.Attributes["successRatio"].InnerText, out simulationSuccessRatio) || (simulationSuccessRatio < 0) || (simulationSuccessRatio > 1)) simulationSuccessRatio = -1; if (Boolean.TryParse(node.InnerText, out simulate)) simOptions = (simulationSuccessRatio != -1) ? new ModuleSimulationOptions(simulationSuccessRatio) : new ModuleSimulationOptions(simulate); } // Module Creation mod = new ModuleClientTcp(moduleName, ips, port); mod.ProcessInfo.ProcessName = processName; mod.ProcessInfo.ProgramPath = programPath; mod.ProcessInfo.ProgramArgs = programArgs; mod.AliveCheck = aliveCheck; mod.RequirePrefix = requirePrefix; mod.SendDelay = sendDelay; mod.Simulation = simOptions; mod.Alias = moduleAlias; mod.CheckInterval = checkInterval; return mod; }
private static bool LoadModule(Blackboard blackboard, XmlNode modules, ILogWriter log, SortedList<string, ModuleClient> disabledModules) { XmlNode node; string moduleName; bool moduleEnabled; string processName; string programPath; string programArgs; string moduleAlias; string moduleAuthor; bool aliveCheck; bool requirePrefix; int sendDelay; bool simulate; double simulationSuccessRatio; ModuleSimulationOptions simOptions; List<IPAddress> ips; int port; int checkInterval; ModuleClient mod; XmlDocument tmpDoc; try { // Module check if ((modules.Name != "module") || (modules.Attributes.Count < 1) || (modules.Attributes["name"] == null) || (modules.Attributes["name"].Value.Length < 1)) return false; #region Module information extraction FetchModuleInfo(modules, out moduleName, out moduleEnabled, out moduleAlias, out moduleAuthor); log.WriteLine(1, "Loading module " + moduleName + (moduleAlias != moduleName ? " alias " + moduleAlias : "")); // Create a XML sub-document XML tmpDoc = new XmlDocument(); tmpDoc.LoadXml(modules.OuterXml); #region Get program path and program arguments FetchProgramInfo(tmpDoc, out processName, out programPath, out programArgs); #endregion // Leo el comando de inicio //if (tmpDoc.GetElementsByTagName("startupCommand").Count != 0) // startupMessage = Command.Parse(tmpDoc.GetElementsByTagName("startupCommand")[0].InnerText); // Get the array of ip addresses where the module can be if (!FetchModuleConnectionSettings(tmpDoc, log, out ips, out port)) return false; // Veify if Blackbard must check Module's alive status FetchModuleStatusCheckSettings(tmpDoc, out aliveCheck, out checkInterval); // Verify if the Module requires SOURCE DESTINATION prefix if ( (tmpDoc.GetElementsByTagName("requirePrefix").Count == 0) || !Boolean.TryParse(tmpDoc.GetElementsByTagName("requirePrefix")[0].InnerText, out requirePrefix) ) requirePrefix = false; // Delay between send operations if ( (tmpDoc.GetElementsByTagName("sendDelay").Count == 0) || !Int32.TryParse(tmpDoc.GetElementsByTagName("sendDelay")[0].InnerText, out sendDelay) ) sendDelay = -1; // Simulation options simOptions = ModuleSimulationOptions.SimulationDisabled; if (tmpDoc.GetElementsByTagName("simulate").Count != 0) { node = tmpDoc.GetElementsByTagName("simulate")[0]; simulationSuccessRatio = -1; if ((node.Attributes["successRatio"] == null) || !Double.TryParse(node.Attributes["successRatio"].InnerText, out simulationSuccessRatio) || (simulationSuccessRatio < 0) || (simulationSuccessRatio > 1)) simulationSuccessRatio = -1; if (Boolean.TryParse(node.InnerText, out simulate)) simOptions = (simulationSuccessRatio != -1) ? new ModuleSimulationOptions(simulationSuccessRatio) : new ModuleSimulationOptions(simulate); } #endregion #region Module Validation ValidateModuleName(blackboard, log, ref moduleName, ref moduleEnabled, moduleAlias, disabledModules); #endregion // Module Creation mod = new ModuleClientTcp(moduleName, ips, port); mod.Enabled = moduleEnabled; mod.Author = moduleAuthor; mod.ProcessInfo.ProcessName = processName; mod.ProcessInfo.ProgramPath = programPath; mod.ProcessInfo.ProgramArgs = programArgs; mod.AliveCheck = aliveCheck; mod.RequirePrefix = requirePrefix; mod.SendDelay = sendDelay; mod.Simulation = simOptions; mod.Alias = moduleAlias; mod.CheckInterval = checkInterval; #region Actions Extraction // Startup actions extraction LoadModuleActions("onStart", "Startup", tmpDoc, mod.StartupActions, log); // Restart actions extraction LoadModuleActions("onRestart", "Restart", tmpDoc, mod.RestartActions, log); // Restart Test actions extraction LoadModuleActions("onRestartTest", "Restart-Test", tmpDoc, mod.RestartTestActions, log); // Stop actons extraction LoadModuleActions("onStop", "Stop", tmpDoc, mod.StopActions, log); // Test Timeout actons extraction LoadModuleActions("onTestTimeOut", "Test Timeout", tmpDoc, mod.TestTimeOutActions, log); #endregion //Extract Module Commands ExtractPrototypes(mod, tmpDoc, log); //if(mod.Prototypes.Count < 1) // return false; // Add module to blackboard AddModuleToBlackboard(blackboard, log, mod, disabledModules); } catch { // Error al cargar el modulo log.WriteLine(2, "Invalid module"); // Continuo con el siguiente return false; } return mod.Enabled; }
private void NewModule() { string name; int i = 1; name = "MODULE"; while (modules.ContainsKey(name + i.ToString().PadLeft(2, '0')) && (i < 99)) { ++i; } if (modules.ContainsKey(name)) return; ModuleClientTcp module = new ModuleClientTcp(name, IPAddress.Loopback, 2000); modules.Add(module.Name, module); ConfigurationHelper.Blackboard.Modules.Add(module); lstBBModules.Items.Add(module); lstBBModules.SelectedItem = module; }
private void ModuleProcessKill(ModuleClientTcp module) { if ((processManager == null) || (module == null)) return; processManager.ShutdownModule(module, ModuleShutdownMethod.CloseThenKill); }
private void ModuleProcessCheckRun(ModuleClientTcp module) { if ((blackboard == null) || !blackboard.IsRunning || (module == null) || !module.Enabled) return; processManager.LaunchModule(module, ModuleStartupMethod.LaunchIfNotRunning); }
private void ModuleProcessRun(ModuleClientTcp module) { if ((processManager == null) || (module == null)) return; processManager.LaunchModule(module, ModuleStartupMethod.LaunchAlways); }
private void ModuleEnableDisable(ModuleClientTcp module) { if (module == null) return; //bool state; //state = btnModuleEnable.Enabled; //btnModuleEnable.Enabled = false; module.Enabled = !module.Enabled; //btnModuleEnable.Enabled = state; UpdateModuleInfo(); }