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;
        }
Exemplo n.º 2
0
        /// <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;
            }
        }
        /// <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);
        }