private void GetAccessRights(GXDLMSObject item, GXByteBuffer data)
        {
            data.SetUInt8((byte)DataType.Structure);
            data.SetUInt8((byte)2);
            data.SetUInt8((byte)DataType.Array);
            GXAttributeCollection attributes = item.Attributes;
            int cnt = (item as IGXDLMSBase).GetAttributeCount();

            data.SetUInt8((byte)cnt);
            for (int pos = 0; pos != cnt; ++pos)
            {
                GXDLMSAttributeSettings att = attributes.Find(pos + 1);
                data.SetUInt8((byte)DataType.Structure); //attribute_access_item
                data.SetUInt8((byte)3);
                GXCommon.SetData(data, DataType.Int8, pos + 1);
                //If attribute is not set return read only.
                if (att == null)
                {
                    GXCommon.SetData(data, DataType.Enum, AccessMode.Read);
                }
                else
                {
                    GXCommon.SetData(data, DataType.Enum, att.Access);
                }
                GXCommon.SetData(data, DataType.None, null);
            }
            data.SetUInt8((byte)DataType.Array);
            attributes = item.MethodAttributes;
            cnt        = (item as IGXDLMSBase).GetMethodCount();
            data.SetUInt8((byte)cnt);
            for (int pos = 0; pos != cnt; ++pos)
            {
                GXDLMSAttributeSettings att = attributes.Find(pos + 1);
                data.SetUInt8((byte)DataType.Structure); //attribute_access_item
                data.SetUInt8((byte)2);
                GXCommon.SetData(data, DataType.Int8, pos + 1);
                //If method attribute is not set return no access.
                if (att == null)
                {
                    GXCommon.SetData(data, DataType.Enum, MethodAccessMode.NoAccess);
                }
                else
                {
                    GXCommon.SetData(data, DataType.Enum, att.MethodAccess);
                }
            }
        }
Exemplo n.º 2
0
 List<byte> GetAccessRights(GXDLMSObject item)
 {
     GXAttributeCollection attribs = new GXAttributeCollection();
     attribs.AddRange(item.Attributes);
     PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(item);
     foreach (PropertyDescriptor it in pdc)
     {
         GXDLMSAttribute att = it.Attributes[typeof(GXDLMSAttribute)] as GXDLMSAttribute;
         if (att != null && attribs.Find(att.Index) == null)
         {
             attribs.Add(att);
         }
     }
     List<byte> data = new List<byte>();
     data.Add((byte)DataType.Structure);
     data.Add(2);
     data.Add((byte)DataType.Array);
     data.Add((byte)attribs.Count);
     foreach (GXDLMSAttributeSettings att in attribs)
     {
         data.Add((byte)DataType.Structure); //attribute_access_item
         data.Add(3);
         GXCommon.SetData(data, DataType.Int8, att.Index);
         GXCommon.SetData(data, DataType.Enum, att.Access);
         GXCommon.SetData(data, DataType.None, 0);
     }
     data.Add((byte)DataType.Array);
     data.Add((byte)item.MethodAttributes.Count);            
     foreach (GXDLMSAttributeSettings it in item.MethodAttributes)
     {
         data.Add((byte)DataType.Structure); //attribute_access_item
         data.Add(2);
         GXCommon.SetData(data, DataType.Int8, it.Index);
         GXCommon.SetData(data, DataType.Enum, it.MethodAccess);
     }
     return data;
 }