/// <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)); }
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); }