Exemple #1
0
        /// <summary>
        /// Removes IP v6 address from the meter.
        /// </summary>
        /// <param name="client">DLMS client.</param>
        /// <param name="type">Address type.</param>
        /// <param name="address">IP v6 Address to remove.</param>
        /// <returns></returns>
        public byte[][] RemoveAddress(GXDLMSClient client, IPv6AddressType type, IPAddress address)
        {
            GXByteBuffer bb = new GXByteBuffer();

            bb.SetUInt8(DataType.Structure);
            bb.SetUInt8(2);
            GXCommon.SetData(null, bb, DataType.Enum, type);
            GXCommon.SetData(null, bb, DataType.OctetString, address.GetAddressBytes());
            return(client.Method(this, 2, bb.Array(), DataType.Structure));
        }
Exemple #2
0
        byte[] IGXDLMSBase.Invoke(GXDLMSSettings settings, ValueEventArgs e)
        {
            GXStructure      val     = (GXStructure)e.Parameters;
            IPv6AddressType  type    = (IPv6AddressType)Convert.ToByte(val[0]);
            IPAddress        address = new IPAddress((byte[])val[1]);
            List <IPAddress> list;

            if (e.Index == 1)
            {
                switch (type)
                {
                case IPv6AddressType.Unicast:
                    list = new List <IPAddress>();
                    if (UnicastIPAddress != null)
                    {
                        list.AddRange(UnicastIPAddress);
                    }
                    list.Add(address);
                    UnicastIPAddress = list.ToArray();
                    break;

                case IPv6AddressType.Multicast:
                    list = new List <IPAddress>();
                    if (MulticastIPAddress != null)
                    {
                        list.AddRange(MulticastIPAddress);
                    }
                    list.Add(address);
                    MulticastIPAddress = list.ToArray();
                    break;

                case IPv6AddressType.Gateway:
                    list = new List <IPAddress>();
                    if (GatewayIPAddress != null)
                    {
                        list.AddRange(GatewayIPAddress);
                    }
                    list.Add(address);
                    GatewayIPAddress = list.ToArray();
                    break;

                default:
                    e.Error = ErrorCode.ReadWriteDenied;
                    break;
                }
            }
            else if (e.Index == 2)
            {
                switch (type)
                {
                case IPv6AddressType.Unicast:
                    list = new List <IPAddress>(UnicastIPAddress);
                    Remove(list, address);
                    UnicastIPAddress = list.ToArray();
                    break;

                case IPv6AddressType.Multicast:
                    list = new List <IPAddress>(MulticastIPAddress);
                    Remove(list, address);
                    MulticastIPAddress = list.ToArray();
                    break;

                case IPv6AddressType.Gateway:
                    list = new List <IPAddress>(GatewayIPAddress);
                    Remove(list, address);
                    GatewayIPAddress = list.ToArray();
                    break;

                default:
                    e.Error = ErrorCode.ReadWriteDenied;
                    break;
                }
            }
            else
            {
                e.Error = ErrorCode.ReadWriteDenied;
            }
            return(null);
        }