예제 #1
0
        /// <summary>
        /// For discovery purposes
        /// </summary>
        public List <string> ListAllProperties()
        {
            List <string> result = new List <string>();
            List <PropertyContextRecord> properties = GetAllProperties();

            foreach (PropertyContextRecord record in properties)
            {
                string value;
                switch (record.wPropType)
                {
                case PropertyTypeName.PtypBoolean:
                    value = GetBooleanProperty(record.wPropId).ToString();
                    break;

                case PropertyTypeName.PtypInteger16:
                    value = GetInt16Property(record.wPropId).ToString() + " (Int16)";
                    break;

                case PropertyTypeName.PtypInteger32:
                    value = GetInt32Property(record.wPropId).ToString();
                    break;

                case PropertyTypeName.PtypInteger64:
                    value = GetInt64Property(record.wPropId).ToString() + " (Int64)";
                    break;

                case PropertyTypeName.PtypFloating32:
                    value = GetFloat32Property(record.wPropId).ToString() + " (Float32)";
                    break;

                case PropertyTypeName.PtypFloating64:
                    value = GetFloat64Property(record.wPropId).ToString() + " (Float64)";
                    break;

                case PropertyTypeName.PtypTime:
                    value = GetDateTimeProperty(record.wPropId).ToString();
                    break;

                case PropertyTypeName.PtypString:
                    value = GetStringProperty(record.wPropId);
                    break;

                case PropertyTypeName.PtypMultiString:
                    value = "Unsupported type: MultiString";
                    break;

                case PropertyTypeName.PtypBinary:
                {
                    try
                    {
                        byte[] bytes = GetBytesProperty((PropertyID)record.wPropId);
                        value = StringHelper.GetByteArrayString(bytes);
                    }
                    catch (MissingSubnodeException)
                    {
                        value = "Missing (Binary)";
                    }
                    break;
                }

                case PropertyTypeName.PtypObject:
                {
                    PropertyContext pc = GetObjectProperty((PropertyID)record.wPropId).PC;
                    value = "Subnode PC:\r\n";
                    if (pc != null)
                    {
                        List <string> subProperies = pc.ListAllProperties();
                        foreach (string line in subProperies)
                        {
                            value += "\t" + line + "\r\n";
                        }
                    }
                    break;
                }

                default:
                    value = "unknown type: 0x" + record.wPropType.ToString("x");
                    break;
                }

                string propertyIDString = GetPropertyIDString((ushort)record.wPropId);
                result.Add(propertyIDString + ": " + value);
            }

            return(result);
        }