Exemple #1
0
        /// <summary>
        ///  Load COSEM objects from the file.
        /// </summary>
        /// <param name="stream">Stream.</param>
        /// <returns>Collection of serialized COSEM objects.</returns>
        public static GXDLMSObjectCollection Load(Stream stream)
        {
            GXDLMSObject obj = null;
            String       target;
            ObjectType   type;

            using (GXXmlReader reader = new GXXmlReader(stream))
            {
                while (!reader.EOF)
                {
                    if (reader.IsStartElement())
                    {
                        target = reader.Name;
                        if (string.Compare("Objects", target, true) == 0)
                        {
                            //Skip.
                            reader.Read();
                        }
                        else if (string.Compare("Object", target, true) == 0)
                        {
                            int    r   = 0;
                            string str = reader.GetAttribute(0);
                            if (int.TryParse(str, out r))
                            {
                                type = (ObjectType)r;
                            }
                            else
                            {
                                type = (ObjectType)Enum.Parse(typeof(ObjectType), str);
                            }
                            reader.Read();
                            obj = GXDLMSClient.CreateObject(type);
                            reader.Objects.Add(obj);
                        }
                        else if (string.Compare("SN", target, true) == 0)
                        {
                            obj.ShortName = (UInt16)reader.ReadElementContentAsInt("SN");
                        }
                        else if (string.Compare("LN", target, true) == 0)
                        {
                            obj.LogicalName = reader.ReadElementContentAsString("LN");
                        }
                        else if (string.Compare("Description", target, true) == 0)
                        {
                            obj.Description = reader.ReadElementContentAsString("Description");
                        }
                        else
                        {
                            (obj as IGXDLMSBase).Load(reader);
                            obj = null;
                        }
                    }
                    else
                    {
                        reader.Read();
                    }
                }
                return(reader.Objects);
            }
        }
Exemple #2
0
        /// <summary>
        ///  Load COSEM objects from the file.
        /// </summary>
        /// <param name="stream">Stream.</param>
        /// <param name="objects">Collection of COSEM objects.</param>
        public static void Load(Stream stream, GXDLMSObjectCollection objects)
        {
            GXDLMSObject obj = null;
            String       target;
            ObjectType   type;

            using (GXXmlReader reader = new GXXmlReader(stream))
            {
                reader.Objects = objects;
                while (!reader.EOF)
                {
                    if (reader.IsStartElement())
                    {
                        target = reader.Name;
                        if (string.Compare("Objects", target, true) == 0)
                        {
                            //Skip.
                            reader.Read();
                        }
                        else if (target.StartsWith("GXDLMS"))
                        {
                            string str = target.Substring(6);
                            reader.Read();
                            type        = (ObjectType)Enum.Parse(typeof(ObjectType), str);
                            obj         = GXDLMSClient.CreateObject(type);
                            obj.Version = 0;
                        }
                        else if (string.Compare("Object", target, true) == 0)
                        {
                            int    r   = 0;
                            string str = reader.GetAttribute(0);
                            if (int.TryParse(str, out r))
                            {
                                type = (ObjectType)r;
                            }
                            else
                            {
                                type = (ObjectType)Enum.Parse(typeof(ObjectType), str);
                            }
                            reader.Read();
                            obj         = GXDLMSClient.CreateObject(type);
                            obj.Version = 0;
                            reader.Objects.Add(obj);
                        }
                        else if (string.Compare("SN", target, true) == 0)
                        {
                            obj.ShortName = (UInt16)reader.ReadElementContentAsInt("SN");
                        }
                        else if (string.Compare("LN", target, true) == 0)
                        {
                            obj.LogicalName = reader.ReadElementContentAsString("LN");
                            GXDLMSObject tmp = reader.Objects.FindByLN(obj.ObjectType, obj.LogicalName);
                            if (tmp == null)
                            {
                                reader.Objects.Add(obj);
                            }
                            else
                            {
                                obj = tmp;
                            }
                        }
                        else if (string.Compare("Description", target, true) == 0)
                        {
                            obj.Description = reader.ReadElementContentAsString("Description");
                        }
                        else if (string.Compare("Version", target, true) == 0)
                        {
                            obj.Version = (UInt16)reader.ReadElementContentAsInt("Version");
                        }
                        else if (string.Compare("Access", target, true) == 0)
                        {
                            int pos = 0;
                            foreach (byte it in reader.ReadElementContentAsString("Access"))
                            {
                                ++pos;
                                obj.SetAccess(pos, (AccessMode)(it - 0x30));
                            }
                        }
                        else if (string.Compare("MethodAccess", target, true) == 0)
                        {
                            int pos = 0;
                            foreach (byte it in reader.ReadElementContentAsString("MethodAccess"))
                            {
                                ++pos;
                                obj.SetMethodAccess(pos, (MethodAccessMode)(it - 0x30));
                            }
                        }
                        else
                        {
                            (obj as IGXDLMSBase).Load(reader);
                            obj = null;
                        }
                    }
                    else
                    {
                        reader.Read();
                    }
                }
                foreach (GXDLMSObject it in reader.Objects)
                {
                    (it as IGXDLMSBase).PostLoad(reader);
                }
            }
        }