コード例 #1
0
        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!!
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        // 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));
            }
        }
コード例 #5
0
        // 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);
                }
            }
        }