public virtual bool RemoveBacnetObject(BacnetObjectId objId) { BaCSharpObject obj = FindBacnetObject(objId); // device object cannot be deleted, even if AcceptDeleteObject is set to true if ((obj.AcceptDeleteObject == false) || (obj == this)) { return(false); } obj.Dispose(); foreach (var o in m_PROP_OBJECT_LIST) { if (o.ToString() == objId.ToString()) { m_PROP_OBJECT_LIST.Remove(o); break; } } foreach (var o in m_PROP_STRUCTURED_OBJECT_LIST) { if (o.ToString() == objId.ToString()) { m_PROP_STRUCTURED_OBJECT_LIST.Remove(o); break; } } return(ObjectsList.Remove(obj)); //since we wont remove object device!!!! using LIST Remove!! }
public void AddBacnetObject(BaCSharpObject newObj) { BacnetValue v = new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_DEVICE_OBJECT_REFERENCE, new BacnetDeviceObjectReference(newObj.PROP_OBJECT_IDENTIFIER)); m_PROP_SUBORDINATE_LIST.Add(v); // Each object provided by the server must be added one by one to the DeviceObject Mydevice.AddBacnetObject(newObj); }
public virtual bool RemoveBacnetObject(BacnetObjectId objId) { BaCSharpObject obj = FindBacnetObject(objId); if (obj != this) { obj.Dispose(); return(ObjectsList.Remove(obj)); //since we wont remove object device!!!! using LIST Remove!! } else { return(false); } }
// Each object provided by the server must be added one by one to the DeviceObject public virtual void AddBacnetObject(BaCSharpObject newObj) { ObjectsList.Add(newObj); newObj.deviceOwner = this; // Update OBJECT_TYPES_SUPPORTED m_PROP_PROTOCOL_OBJECT_TYPES_SUPPORTED.SetBit((byte)newObj.PROP_OBJECT_IDENTIFIER.type, true); // Update OBJECT_LIST m_PROP_OBJECT_LIST.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_ID, newObj.PROP_OBJECT_IDENTIFIER)); // Update the structured object list // but only if the caller is not a view // check by caller method type class appartenance MethodBase m = new StackFrame(1).GetMethod(); bool CallerIsView = (m.DeclaringType.Name == "StructuredView"); if (!CallerIsView) { m_PROP_STRUCTURED_OBJECT_LIST.Add(new BacnetValue(BacnetApplicationTags.BACNET_APPLICATION_TAG_OBJECT_ID, newObj.PROP_OBJECT_IDENTIFIER)); } }
// Copy the Present value into each reference properties value protected virtual void DoDispatchValue() { if ((m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references == null) || (Mydevice == null)) { return; } foreach (object obj in m_PROP_LIST_OF_OBJECT_PROPERTY_REFERENCES.references) { BacnetDeviceObjectPropertyReference reference = (BacnetDeviceObjectPropertyReference)obj; // reference.deviceIndentifier.type is not set to OBJECT_DEVICE for local object reference if (reference.deviceIndentifier.type != BacnetObjectTypes.OBJECT_DEVICE) // local object { BaCSharpObject bcs = Mydevice.FindBacnetObject(reference.objectIdentifier); if (bcs != null) { BacnetPropertyValue value = new BacnetPropertyValue(); if (m_PROP_PRIORITY == 0) { value.priority = (byte)16; } else { value.priority = (byte)m_PROP_PRIORITY; } value.property = new BacnetPropertyReference((uint)reference.propertyIdentifier, reference.arrayIndex); value.value = new BacnetValue[] { new BacnetValue(m_PROP_PRESENT_VALUE) }; bcs.WritePropertyValue(value, false); } } else { KeyValuePair <BacnetClient, BacnetAddress>?recipient = null; try { // SuroundingDevices is updated with Iam messages recipient = Mydevice.SuroundingDevices[reference.deviceIndentifier.instance]; } catch { } if (recipient == null) { return; } BacnetValue[] value = new BacnetValue[] { new BacnetValue(m_PROP_PRESENT_VALUE) }; uint wp = m_PROP_PRIORITY; System.Threading.ThreadPool.QueueUserWorkItem((o) => { recipient.Value.Key.WritePriority = wp; recipient.Value.Key.BeginWritePropertyRequest(recipient.Value.Value, reference.objectIdentifier, (BacnetPropertyIds)reference.propertyIdentifier, value, false); } , null); } } }