///Start new transaction of module if it is possible ///<param name="aOID">Module's OID</param> public BTransactionItem Start(string aOID) { if (transactions.Count == transactionsCapacity) throw new Exception ("Maximum running transactions reached!"); // get instance of module BModuleItem module = modManager[aOID]; if (module == null) throw new Exception("Module with OID " + aOID + " not found."); // read configuration from module XmlNode config; try { config = module.GetConfig().GetXmlNode("/beline/conf/module/configuration"); // if this is not Xml element, configuration file is bad if (config.NodeType != XmlNodeType.Element) throw new Exception(); } catch (Exception) { throw new Exception("Error in configuration file. It does't contain \"/beline/conf/module/configuration\" branch"); } ArrayList configItems = new ArrayList(config.ChildNodes.Count); foreach (XmlNode element in config.ChildNodes) { // if another child than element "bcfgitem" do not parse him if (element.NodeType != XmlNodeType.Element || element.LocalName != "bcfgitem") continue; BValueType hodnota = BValueType.Deserialize(element.FirstChild); if (hodnota != null) configItems.Add(hodnota); } BValueType[] configArray = new BValueType[configItems.Count]; configItems.CopyTo(configArray); // create transaction BTransactionItem transaction = new BTransactionItem(module, configArray); // save transaction to inner ArrayList transactions.Add(transaction.OID, transaction); return transaction; }
// Return array of all transactions public BTransactionItem[] GetAllTransactions() { BTransactionItem[] retval = new BTransactionItem[transactions.Count]; int i=0; foreach (DictionaryEntry transaction in transactions) { retval[i++] = (BTransactionItem)transaction.Value; } //transactions.CopyTo(retval, 0); return retval; }