public static PeerChannelParameters ParseConfig(XmlDocument configDoc, string selectConfig) { PeerChannelParameters parameters = new PeerChannelParameters(); XmlNodeList configs = configDoc.GetElementsByTagName("PeerChannelConfigSet")[0].ChildNodes; XmlNode elementList = configs.Item(0); string defConfig = configDoc.DocumentElement.Attributes.GetNamedItem("DefaultConfig").InnerText; if (selectConfig != null) defConfig = selectConfig; while (elementList.Attributes.GetNamedItem("ConfigName").InnerText != defConfig) { elementList = elementList.NextSibling; if (elementList == null) throw new ScallopException("Configuration " + defConfig + " not found!"); } XmlNodeList settings = elementList.ChildNodes; for (int i = 0; i < settings.Count; i++) { XmlNode setting = settings.Item(i); switch (setting.Name) { case "NodeId": parameters.NodeId = setting.InnerText; break; case "NetworkName": parameters.NetworkName = setting.InnerText; break; case "NetworkAddress": parameters.Ip = IPAddress.Parse(setting.InnerText); break; case "EnableTransportSecurity": parameters.UseTLS = bool.Parse(setting.InnerText); break; case "TLSPassword": parameters.TLSPassword = setting.InnerText; break; case "NeighborQueryRate": parameters.NeighborQueryRate = int.Parse(setting.InnerText); break; default: break; } } return parameters; }
/// <summary> /// Joins a PeerChannel. /// </summary> /// <param name="networkSettings">Configuration XML document.</param> /// <param name="selectConfig">String identifying config item to use.</param> public void Join(XmlDocument networkSettings, string selectConfig) { if (NetPeerTcpBinding.IsPnrpAvailable == false) { this.doStateChanged(this, new ScallopNetworkStatusChangedEventArgs(this.myState, ScallopNetworkState.Error, "PNRP is not installed and configured!")); return; } //AppDomain.CurrentDomain.UnhandledException += this.error_handler; try { // parse config if (networkSettings == null) { this.doStateChanged(this, new ScallopNetworkStatusChangedEventArgs(this.myState, ScallopNetworkState.Error, "Config is null")); return; } networkSettings.Schemas.Add(this.configSchema); networkSettings.Validate(null); this.configDocument = networkSettings; this.selectedConfig = selectConfig; this.parameters = PeerChannelParameters.ParseConfig(networkSettings, selectConfig); if (this.parameters == null) { throw new ScallopException("StatusChanged parsing config"); } this.id = (parameters.NodeId != null) ? parameters.NodeId : System.Guid.NewGuid().ToString(); this.registerPeerChannel(this.id); BackgroundWorker queryThread = new BackgroundWorker(); queryThread.WorkerSupportsCancellation = true; queryThread.DoWork += new DoWorkEventHandler(queryThread_DoWork); queryThread.RunWorkerCompleted += new RunWorkerCompletedEventHandler(queryThread_RunWorkerCompleted); queryThread.RunWorkerAsync(); return; } catch (Exception e) { error_handler(this, new UnhandledExceptionEventArgs(e, false)); return; } }
public static PeerChannelParameters ParseConfig(XmlDocument configDoc, string selectConfig) { PeerChannelParameters parameters = new PeerChannelParameters(); XmlNodeList configs = configDoc.GetElementsByTagName("PeerChannelConfigSet")[0].ChildNodes; XmlNode elementList = configs.Item(0); string defConfig = configDoc.DocumentElement.Attributes.GetNamedItem("DefaultConfig").InnerText; if (selectConfig != null) { defConfig = selectConfig; } while (elementList.Attributes.GetNamedItem("ConfigName").InnerText != defConfig) { elementList = elementList.NextSibling; if (elementList == null) { throw new ScallopException("Configuration " + defConfig + " not found!"); } } XmlNodeList settings = elementList.ChildNodes; for (int i = 0; i < settings.Count; i++) { XmlNode setting = settings.Item(i); switch (setting.Name) { case "NodeId": parameters.NodeId = setting.InnerText; break; case "NetworkName": parameters.NetworkName = setting.InnerText; break; case "NetworkAddress": parameters.Ip = IPAddress.Parse(setting.InnerText); break; case "EnableTransportSecurity": parameters.UseTLS = bool.Parse(setting.InnerText); break; case "TLSPassword": parameters.TLSPassword = setting.InnerText; break; case "NeighborQueryRate": parameters.NeighborQueryRate = int.Parse(setting.InnerText); break; default: break; } } return(parameters); }