コード例 #1
0
ファイル: FrmConfigUtil.cs プロジェクト: ewin66/Blackboard
        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;
        }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
        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;
        }
コード例 #4
0
ファイル: Form1.cs プロジェクト: BioRoboticsUNAM/Blackboard
        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;
        }
コード例 #5
0
		private void ModuleProcessKill(ModuleClientTcp module)
		{
			if ((processManager == null) || (module == null))
				return;
			processManager.ShutdownModule(module, ModuleShutdownMethod.CloseThenKill);
		}
コード例 #6
0
		private void ModuleProcessCheckRun(ModuleClientTcp module)
		{
			if ((blackboard == null) || !blackboard.IsRunning || (module == null) || !module.Enabled)
				return;
			processManager.LaunchModule(module, ModuleStartupMethod.LaunchIfNotRunning);
		}
コード例 #7
0
		private void ModuleProcessRun(ModuleClientTcp module)
		{
			if ((processManager == null) || (module == null))
				return;
			processManager.LaunchModule(module, ModuleStartupMethod.LaunchAlways);
		}
コード例 #8
0
		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();
		}