Skip to content

Commit

Permalink
Merge pull request #558 from ASNeG/node_management_service
Browse files Browse the repository at this point in the history
Node management service
  • Loading branch information
huebl committed Jan 21, 2023
2 parents 1fcba1e + ff256a5 commit b4ab95b
Show file tree
Hide file tree
Showing 11 changed files with 974 additions and 109 deletions.
33 changes: 32 additions & 1 deletion src/OpcUaStackCore/StandardDataTypes/EnumDefinitionExpand.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2018-2019 Kai Huebl (kai@huebl-sgh.de)
Copyright 2018-2021 Kai Huebl (kai@huebl-sgh.de)
Lizenziert gemäß Apache Licence Version 2.0 (die „Lizenz“); Nutzung dieser
Datei nur in Übereinstimmung mit der Lizenz erlaubt.
Expand Down Expand Up @@ -86,6 +86,24 @@ namespace OpcUaStackCore
return boost::make_shared<EnumDefinitionExpand>();
}

std::string
EnumDefinitionExpand::namespaceName(void)
{
return "http://opcfoundation.org/UA/";
}

std::string
EnumDefinitionExpand::typeName(void)
{
return "EnumDefinition";
}

OpcUaNodeId
EnumDefinitionExpand::typeId(void)
{
return OpcUaNodeId((OpcUaUInt32)100,0);
}

OpcUaNodeId
EnumDefinitionExpand::binaryTypeId(void)
{
Expand Down Expand Up @@ -165,6 +183,19 @@ namespace OpcUaStackCore
os << "EnumFields="; enumFields_->out(os);
}

bool
EnumDefinitionExpand::operator!=(const EnumDefinitionExpand& value)
{
return !this->operator==(value);
}

EnumDefinitionExpand&
EnumDefinitionExpand::operator=(const EnumDefinitionExpand& value)
{
const_cast<EnumDefinitionExpand*>(&value)->copyTo(*this);
return *this;
}

}


7 changes: 6 additions & 1 deletion src/OpcUaStackCore/StandardDataTypes/EnumDefinitionExpand.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2018-2019 Kai Huebl (kai@huebl-sgh.de)
Copyright 2018-2021 Kai Huebl (kai@huebl-sgh.de)
Lizenziert gemäß Apache Licence Version 2.0 (die „Lizenz“); Nutzung dieser
Datei nur in Übereinstimmung mit der Lizenz erlaubt.
Expand Down Expand Up @@ -44,13 +44,18 @@ namespace OpcUaStackCore

void copyTo(EnumDefinitionExpand& enumTypeDefinition);
bool operator==(const EnumDefinitionExpand& enumTypeDefinition) const;
bool operator!=(const EnumDefinitionExpand& value);
EnumDefinitionExpand& operator=(const EnumDefinitionExpand& value);
friend std::ostream& operator<<(std::ostream& os, const EnumDefinitionExpand& value) {
const_cast<EnumDefinitionExpand*>(&value)->out(os);
return os;
}

//- ExtensionObjectBase -----------------------------------------------
virtual ExtensionObjectBase::SPtr factory(void) override;
virtual std::string namespaceName(void) override;
virtual std::string typeName(void) override;
virtual OpcUaNodeId typeId(void) override;
virtual OpcUaNodeId binaryTypeId(void) override;
virtual OpcUaNodeId xmlTypeId(void) override;
virtual bool opcUaBinaryEncode(std::ostream& os) const override;
Expand Down
31 changes: 31 additions & 0 deletions src/OpcUaStackCore/StandardDataTypes/StructureDefinitionExpand.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,19 @@ namespace OpcUaStackCore
*fields_ == *structureTypeDefinition.fields_;
}

bool
StructureDefinitionExpand::operator!=(const StructureDefinitionExpand& value)
{
return !this->operator==(value);
}

StructureDefinitionExpand&
StructureDefinitionExpand::operator=(const StructureDefinitionExpand& value)
{
const_cast<StructureDefinitionExpand*>(&value)->copyTo(*this);
return *this;
}

// ------------------------------------------------------------------------
// ------------------------------------------------------------------------
//
Expand All @@ -142,6 +155,24 @@ namespace OpcUaStackCore
return boost::make_shared<StructureDefinitionExpand>();
}

std::string
StructureDefinitionExpand::namespaceName(void)
{
return "http://opcfoundation.org/UA/";
}

std::string
StructureDefinitionExpand::typeName(void)
{
return "StructureDefinition";
}

OpcUaNodeId
StructureDefinitionExpand::typeId(void)
{
return OpcUaNodeId((OpcUaUInt32)99,0);
}

OpcUaNodeId
StructureDefinitionExpand::binaryTypeId(void)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,18 @@ namespace OpcUaStackCore

void copyTo(StructureDefinitionExpand& structureTypeDefinition);
bool operator==(const StructureDefinitionExpand& structureTypeDefinition) const;
bool operator!=(const StructureDefinitionExpand& value);
StructureDefinitionExpand& operator=(const StructureDefinitionExpand& value);
friend std::ostream& operator<<(std::ostream& os, const StructureDefinitionExpand& value) {
const_cast<StructureDefinitionExpand*>(&value)->out(os);
return os;
}

//- ExtensionObjectBase -----------------------------------------------
virtual ExtensionObjectBase::SPtr factory(void) override;
virtual std::string namespaceName(void) override;
virtual std::string typeName(void) override;
virtual OpcUaNodeId typeId(void) override;
virtual OpcUaNodeId binaryTypeId(void) override;
virtual OpcUaNodeId xmlTypeId(void) override;
virtual bool opcUaBinaryEncode(std::ostream& os) const override;
Expand Down
8 changes: 4 additions & 4 deletions src/OpcUaStackServer/AddressSpaceModel/ReferenceItem.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2015-2019 Kai Huebl (kai@huebl-sgh.de)
Copyright 2015-2023 Kai Huebl (kai@huebl-sgh.de)
Lizenziert gemäß Apache Licence Version 2.0 (die „Lizenz“); Nutzung dieser
Datei nur in Übereinstimmung mit der Lizenz erlaubt.
Expand Down Expand Up @@ -40,9 +40,9 @@ namespace OpcUaStackServer
void copyTo(ReferenceItem& referenceItem);
bool operator==(const ReferenceItem& referenceItem);

OpcUaStackCore::OpcUaNodeId typeId_;
OpcUaStackCore::OpcUaNodeId nodeId_;
bool isForward_;
OpcUaStackCore::OpcUaNodeId typeId_; // Reference type
OpcUaStackCore::OpcUaNodeId nodeId_; // Target node
bool isForward_; // Forward reference

};

Expand Down
40 changes: 39 additions & 1 deletion src/OpcUaStackServer/AddressSpaceModel/ReferenceItemMap.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2015-2020 Kai Huebl (kai@huebl-sgh.de)
Copyright 2015-2023 Kai Huebl (kai@huebl-sgh.de)
Lizenziert gemäß Apache Licence Version 2.0 (die „Lizenz“); Nutzung dieser
Datei nur in Übereinstimmung mit der Lizenz erlaubt.
Expand Down Expand Up @@ -155,14 +155,52 @@ namespace OpcUaStackServer
bool
ReferenceItemMap::remove(const OpcUaNodeId& referenceTypeNodeId, const OpcUaNodeId& nodeId)
{
// Remove references from reference item table
size_t result = referenceItemMultiMap_[referenceTypeNodeId].erase(nodeId);

// Check number of elements in reference item table
if (referenceItemMultiMap_[referenceTypeNodeId].size() == 0) {
referenceItemMultiMap_.erase(referenceTypeNodeId);
}

return result == 1;
}

bool
ReferenceItemMap::remove(
const OpcUaStackCore::OpcUaNodeId& referenceTypeNodeId,
bool isForward,
const OpcUaStackCore::OpcUaNodeId& nodeId
)
{
bool remove = false;

// Get reference item table
auto referenceItemTable = referenceItemMultiMap_.find(referenceTypeNodeId);
if (referenceItemTable == referenceItemMultiMap_.end()) return true;

// Remove references
auto it = referenceItemTable->second.begin();
while (it != referenceItemTable->second.end()) {
auto referenceItem = it->second;

if (referenceItem->isForward_ == isForward && referenceItem->nodeId_ == nodeId) {
remove = true;
it = referenceItemTable->second.erase(it);
}
else {
++it;
}
}

// Check number of elements in reference item table
if (referenceItemTable->second.size() == 0) {
referenceItemMultiMap_.erase(referenceItemTable);
}

return remove;
}

void
ReferenceItemMap::copyTo(ReferenceItemMap::SPtr& referenceItemMap) const
{
Expand Down
3 changes: 2 additions & 1 deletion src/OpcUaStackServer/AddressSpaceModel/ReferenceItemMap.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2015-2020 Kai Huebl (kai@huebl-sgh.de)
Copyright 2015-2023 Kai Huebl (kai@huebl-sgh.de)
Lizenziert gemäß Apache Licence Version 2.0 (die „Lizenz“); Nutzung dieser
Datei nur in Übereinstimmung mit der Lizenz erlaubt.
Expand Down Expand Up @@ -72,6 +72,7 @@ namespace OpcUaStackServer

bool remove(const OpcUaStackCore::OpcUaNodeId& referenceTypeNodeId, ReferenceItem::SPtr& referenceItem);
bool remove(const OpcUaStackCore::OpcUaNodeId& referenceTypeNodeId, const OpcUaStackCore::OpcUaNodeId& nodeId);
bool remove(const OpcUaStackCore::OpcUaNodeId& referenceTypeNodeId, bool isForward, const OpcUaStackCore::OpcUaNodeId& nodeId);

void copyTo(ReferenceItemMap::SPtr& referenceItemMap) const;
void copyTo(ReferenceItemMap& referenceItemMap) const;
Expand Down
Loading

0 comments on commit b4ab95b

Please sign in to comment.