C++ Based OPC UA Client/Server SDK
1.6.4.457
|
Main management class of the server core module. More...
#include <servermanager.h>
Public Member Functions | |
ServerManager () | |
Construction. | |
virtual | ~ServerManager () |
Destruction. | |
UaStatus | startUp (ServerConfig *pServerConfig) |
Start up server manager. More... | |
UaStatus | shutDown () |
Shut down server manager. More... | |
ServerConfig * | getServerConfig () |
Returns the server configuration object. More... | |
NodeManagerRoot * | getNodeManagerRoot () |
Returns the root node manager object. More... | |
NodeManager * | getNodeManagerNS1 () |
Returns the node manager object responsible for namespace index 1 nodes. More... | |
SessionManager * | getSessionManager () |
Returns the OPC UA Session manager object. More... | |
OpcUa::HistoryServerCapabilitiesType * | getHistoryServerCapabilities () |
Returns the OPC UA HistoryServerCapabilities object. More... | |
UaThreadPool * | getThreadPool () |
Returns the thread pool of the server core module. More... | |
void | registerDynamicEventManager (EventManager *pEventManager) |
Inform the server manager about a new event manager added after server start-up. More... | |
void | registerApplicationControlCallback (UaApplicationControlCallback *pCallback) |
Allows the application to set a callback for application control. | |
UaApplicationControlCallback * | getApplicationControlCallback () |
Returns the application control callback interface (NULL if not set) | |
OpcUa_UInt32 | startServerShutDown (OpcUa_Int32 secondsTillShutdown, const UaLocalizedText &shutdownReason) |
Inform the server manager about the shutdown of the server. More... | |
OpcUa_UInt32 | startServerShutDown (OpcUa_Int32 secondsTillShutdown, const UaLocalizedTextArray &shutdownReason) |
Inform the server manager about the shutdown of the server. More... | |
void | changeServerState (OpcUa_ServerState newState) |
Change the server state represented in the address space. More... | |
void | changeServiceLevel (OpcUa_Byte serviceLevel, OpcUa_Byte changeMask) |
Update the ServiceLevel property of the Server object. More... | |
Session * | getInternalSession () |
Returns the default internal Session object with root rights. More... | |
Session * | createInternalSession (const UaString &sessionName, const UaString &localeId, UaUserIdentityToken *pUserIdentityToken) |
Creates an internal session for a special user. More... | |
UaStatus | getNamespaceTable (UaStringArray &sNamespaces) |
Get namespace array of server. More... | |
UaStatus | browse (const UaNodeId &startingNode, const UaNodeId &referenceTypeFilter, ContinuationPointWrapper &continuationPoint, UaReferenceDescriptions &references) |
Browse function for internal use. More... | |
UaStatus | browse (const UaNodeId &startingNode, OpcUa_Boolean isInverse, const UaNodeId &referenceTypeFilter, OpcUa_UInt32 nodeClassMask, ContinuationPointWrapper &continuationPoint, UaReferenceDescriptions &references) |
Browse function for internal use. More... | |
UaStatus | browse (Session *pSession, const UaNodeId &startingNode, ContinuationPointWrapper &continuationPoint, UaReferenceDescriptions &references) |
Browse function for internal use. More... | |
UaStatus | browse (Session *pSession, const UaNodeId &startingNode, OpcUa_Boolean isInverse, const UaNodeId &referenceTypeFilter, OpcUa_UInt32 nodeClassMask, ContinuationPointWrapper &continuationPoint, UaReferenceDescriptions &references) |
Browse function for internal use. More... | |
UaStatus | read (Session *pSession, OpcUa_Double maxAge, const UaReadValueIds &nodesToRead, UaDataValues &results) |
Read function for internal use. More... | |
UaStatus | read (Session *pSession, OpcUa_Double maxAge, const PVariableHandleArray &variableHandles, const UaReadValueIds &nodesToRead, UaDataValues &results) |
Read function for internal use. More... | |
UaStatus | write (Session *pSession, const UaWriteValues &nodesToWrite, UaStatusCodeArray &results) |
Write function for internal use. More... | |
UaStatus | write (Session *pSession, const PVariableHandleArray &variableHandles, const UaWriteValues &nodesToWrite, UaStatusCodeArray &results) |
Write function for internal use. More... | |
UaStatus | call (Session *pSession, const UaNodeId &objectId, const UaNodeId &methodId, const UaVariantArray &inputArguments, UaStatusCodeArray &inputArgumentResults, UaVariantArray &outputArguments) |
Internal function to call a method. More... | |
UaStatus | createDataMonitoredItems (Session *pSession, DataMonitoredItemSpecArray &dataMonitoredItems) |
Internal function to create a list of data monitored items. More... | |
UaStatus | createEventMonitoredItem (Session *pSession, const UaNodeId &objectToMonitor, EventCallback *pEventCallback, OpcUa_EventFilter *pEventFilter, OpcUa_UInt32 &monitoredItemId) |
Internal function to create an event monitored item. More... | |
void | setEventManagerInvalid (OpcUa_UInt32 monitoredItemId, OpcUa_UInt32 eventManagerIndex) |
Internal function to inform the event monitored item about an invalidated EventManager. More... | |
UaStatus | conditionRefresh (Session *pSession, OpcUa_UInt32 monitoredItemId) |
Internal function to request a condition refresh for the event monitored item. More... | |
UaStatus | deleteMonitoredItems (Session *pSession, const UaUInt32Array &monitoredItemIds, UaStatusCodeArray &results) |
Internal function to delete a list of monitored items. More... | |
UaStatus | addRole (const UaString &sRoleName, const UaString &sNamespaceUri, RoleTypeOperations **ppRoleTypeOperations) |
Adds a new Role to the role management of the server. More... | |
UaStatus | removeRole (RoleTypeOperations *pRoleTypeOperations) |
Removes a Role from the role management of the server. More... | |
UaStatus | registerRole (RoleTypeOperations *pRoleTypeOperations) |
Register a Role with the RoleSet object. More... | |
UaStatus | unregisterRole (RoleTypeOperations *pRoleTypeOperations) |
Unregister a Role from the RoleSet object. More... | |
OpcUa_UInt32 | getIdForWellKnownRole (OpcUa_UInt32 numericIdentifier) const |
Get internal RoleId for the numeric identifier of a well known OPC UA defined Role. More... | |
UaNodeId | getRoleNodeId (OpcUa_UInt32 roleId) const |
Get Role NodeId for the internal RoleId. More... | |
OpcUa_UInt32 | getRoleId (const UaNodeId &roleNodeId) const |
Get internal RoleId for the Role NodeId. More... | |
UaStatus | setRoleIds (const Session *pSession) const |
Set a list of all roles assigned to the user / endpoint / application in the Session object. More... | |
UaStatus | getRoleByRoleId (const OpcUa_UInt32 roleId, RoleTypeOperations **ppRoleTypeOperations) const |
Get role management object by internal RoleId. More... | |
UaStatus | getRoleByNodeId (const UaNodeId &roleNodeId, RoleTypeOperations **ppRoleTypeOperations) const |
Get role management object by role NodeId. More... | |
UaStatus | getRoleByName (const UaString &sRoleName, const UaString &sNamespaceUri, RoleTypeOperations **ppRoleTypeOperations) const |
Get role management object by role name and role name namespace URI. More... | |
Protected Member Functions | |
virtual SessionManager * | createSessionManager () |
Creates the SessionManager. More... | |
virtual NodeManager * | createNodeManagerNS1 (const UaString &sServerUri) |
Creates the NodeManagerNS1. More... | |
Main management class of the server core module.
The class manages the central components of the server core module like NodeManagerRoot and SessionManager. The object is passed to all NodeManagers and modules during start up.
The class provides also an internal client API that can be used to retrieve information provided by the server. It is using the information already provided for OPC UA Clients. There are no changes required in the data integration modules implementing the interfaces like NodeManager and IOManager.
UaStatus ServerManager::addRole | ( | const UaString & | sRoleName, |
const UaString & | sNamespaceUri, | ||
RoleTypeOperations ** | ppRoleTypeOperations | ||
) |
Adds a new Role to the role management of the server.
Adds the role management object to the address space and registers the role with the RoleSet object. If Sessions exist, the role mapping of the Sessions is updated.
[in] | sRoleName | Name of the role to add |
[in] | sNamespaceUri | Namespace URI of the role to add. An empty URI is treated as index 1 |
[out] | ppRoleTypeOperations | The RoleTypeOperations object for the added role if add succeeded |
UaStatus ServerManager::browse | ( | const UaNodeId & | startingNode, |
const UaNodeId & | referenceTypeFilter, | ||
ContinuationPointWrapper & | continuationPoint, | ||
UaReferenceDescriptions & | references | ||
) |
Browse function for internal use.
This method provides a simplified browse function for internal use. It uses the normal NodeManager::browse but hides the handling that is necessary for remote access from a client. It makes that sure that the internal browsing works, regardless of the way the different NodeManagers in the server are implemented.
This version of the simplified browse is browsing forward and returns all node classes.
[in] | startingNode | Starting node for the browse call |
[in] | referenceTypeFilter | Reference type filter to return only nodes referenced from the starting node with this reference type or a subtype |
[in,out] | continuationPoint | Continuation point for the browse. Indicates whether more results are available |
[out] | references | List of browse results for the browsed node |
UaStatus ServerManager::browse | ( | const UaNodeId & | startingNode, |
OpcUa_Boolean | isInverse, | ||
const UaNodeId & | referenceTypeFilter, | ||
OpcUa_UInt32 | nodeClassMask, | ||
ContinuationPointWrapper & | continuationPoint, | ||
UaReferenceDescriptions & | references | ||
) |
Browse function for internal use.
This method provides a simplified browse function for internal use. It uses the normal NodeManager::browse but hides the handling that is necessary for remote access from a client. It makes sure that the internal browsing works, regardless of the way the different NodeManagers in the server are implemented.
[in] | startingNode | Starting node for the browse call |
[in] | isInverse | Flag indicating whether the browse is inverse (True) or forward (False) |
[in] | referenceTypeFilter | Reference type filter to return only nodes referenced from the starting node with this reference type or a subtype |
[in] | nodeClassMask | Node class filter mask identifing the node classes to include in the browse result Bit mask containing the following options: OpcUa_NodeClass_Object = 1 OpcUa_NodeClass_Variable = 2 OpcUa_NodeClass_Method = 4 OpcUa_NodeClass_ObjectType = 8 OpcUa_NodeClass_VariableType = 16 OpcUa_NodeClass_ReferenceType = 32 OpcUa_NodeClass_DataType = 64 OpcUa_NodeClass_View = 128 If set to zero, all node classes are returned. |
[in,out] | continuationPoint | Continuation point for the browse. Indicates if more results are available |
[out] | references | List of browse results for the browsed node |
UaStatus ServerManager::browse | ( | Session * | pSession, |
const UaNodeId & | startingNode, | ||
ContinuationPointWrapper & | continuationPoint, | ||
UaReferenceDescriptions & | references | ||
) |
Browse function for internal use.
This method provides a simplified browse function for internal use. It uses the normal NodeManager::browse but hides the handling that is necessary for the remote access from a client. It makes sure that the internal browsing works, regardless of the way the different NodeManagers in the server are implemented.
This version of the simplified browse is browsing hierarchical references in forward direction and returns all node classes.
[in] | pSession | Session context for the browse call |
[in] | startingNode | Starting node for the browse call |
[in,out] | continuationPoint | Continuation point for the browse. Indicates whether more results are available |
[out] | references | List of browse results for the browsed node |
UaStatus ServerManager::browse | ( | Session * | pSession, |
const UaNodeId & | startingNode, | ||
OpcUa_Boolean | isInverse, | ||
const UaNodeId & | referenceTypeFilter, | ||
OpcUa_UInt32 | nodeClassMask, | ||
ContinuationPointWrapper & | continuationPoint, | ||
UaReferenceDescriptions & | references | ||
) |
Browse function for internal use.
This method provides a simplified browse function for internal use. It uses the normal NodeManager::browse but hides the handling that is necessary for the remote access from a client. It makes sure that the internal browsing works, regardless of the way the different NodeManagers in the server are implemented.
[in] | pSession | Session context for the browse call |
[in] | startingNode | Starting node for the browse call |
[in] | isInverse | Flag indicating whether the browse is inverse (True) or forward (False) |
[in] | referenceTypeFilter | Reference type filter to return only nodes referenced from the starting node with this reference type or a subtype |
[in] | nodeClassMask | Node class filter mask identifing the node classes to include in the browse result Bit mask containing the following options: OpcUa_NodeClass_Object = 1 OpcUa_NodeClass_Variable = 2 OpcUa_NodeClass_Method = 4 OpcUa_NodeClass_ObjectType = 8 OpcUa_NodeClass_VariableType = 16 OpcUa_NodeClass_ReferenceType = 32 OpcUa_NodeClass_DataType = 64 OpcUa_NodeClass_View = 128 If set to zero, all node classes are returned. |
[in,out] | continuationPoint | Continuation point for the browse. Indicates whether more results are available |
[out] | references | List of browse results for the browsed node |
UaStatus ServerManager::call | ( | Session * | pSession, |
const UaNodeId & | objectId, | ||
const UaNodeId & | methodId, | ||
const UaVariantArray & | inputArguments, | ||
UaStatusCodeArray & | inputArgumentResults, | ||
UaVariantArray & | outputArguments | ||
) |
Internal function to call a method.
[in] | pSession | Session context for the function call |
[in] | objectId | Object node for the call |
[in] | methodId | Method node for the call |
[in] | inputArguments | Array of input arguments |
[out] | inputArgumentResults | Array of input argument results |
[out] | outputArguments | Array of output argumens |
void ServerManager::changeServerState | ( | OpcUa_ServerState | newState | ) |
Change the server state represented in the address space.
This method allows the application to change the server state if the state is not longer running or to change the state back to running after an error situation.
[in] | newState | New server status |
void ServerManager::changeServiceLevel | ( | OpcUa_Byte | serviceLevel, |
OpcUa_Byte | changeMask | ||
) |
Update the ServiceLevel property of the Server object.
serviceLevel | The new service level to set. |
changeMask | A mask indicating which bits of the service level should be set. If a bit is set to 1, the corresponding bit of serviceLevel is set in the server's serviceLevel. If a bit is set to 0, the corresponding bit in the server's serviceLevel will remain untouched. |
Internal function to request a condition refresh for the event monitored item.
[in] | pSession | Session context for the function call |
[in] | monitoredItemId | Id of the affected monitored item |
UaStatus ServerManager::createDataMonitoredItems | ( | Session * | pSession, |
DataMonitoredItemSpecArray & | dataMonitoredItems | ||
) |
Internal function to create a list of data monitored items.
[in] | pSession | Session context for the function call |
[in,out] | dataMonitoredItems | Array of DataMonitoredItemSpec objects containing the information for the creation in a data monitored item. |
UaStatus ServerManager::createEventMonitoredItem | ( | Session * | pSession, |
const UaNodeId & | objectToMonitor, | ||
EventCallback * | pEventCallback, | ||
OpcUa_EventFilter * | pEventFilter, | ||
OpcUa_UInt32 & | monitoredItemId | ||
) |
Internal function to create an event monitored item.
[in] | pSession | Session context for the function call |
[in] | objectToMonitor | Object node used as event notifier |
[in] | pEventCallback | Event callback interface for the event monitored item. The implementation of this callback should never block. |
[in] | pEventFilter | Event filter for the monitored item |
[out] | monitoredItemId | Id of the created monitored item |
Session * ServerManager::createInternalSession | ( | const UaString & | sessionName, |
const UaString & | localeId, | ||
UaUserIdentityToken * | pUserIdentityToken | ||
) |
Creates an internal session for a special user.
The default intenal session with root rights is available through getInternalSession().
The Session is a reference counted object. The caller must release the reference it gets by creating the session if the session is not longer needed.
[in] | sessionName | Name of the session. This is mainly used in the session diagnostics |
[in] | localeId | Locale used for the session |
[in] | pUserIdentityToken | User identity used for the session. NULL for anonymous. |
|
protectedvirtual |
Creates the NodeManagerNS1.
This virtual function can be overwritten by a class derived from ServerManager to create a class derived from NodeManagerNS1. An instance of the class derived from ServerManager can be passed to CoreModule::initialize() to force the CoreModule to use this instance instead of creating its own ServerManager.
|
protectedvirtual |
Creates the SessionManager.
This virtual function can be overwritten by a class derived from ServerManager to create a class derived from SessionManager. An instance of the class derived from ServerManager can be passed to CoreModule::initialize() to force the CoreModule to use this instance instead of creating its own ServerManager.
UaStatus ServerManager::deleteMonitoredItems | ( | Session * | pSession, |
const UaUInt32Array & | monitoredItemIds, | ||
UaStatusCodeArray & | results | ||
) |
Internal function to delete a list of monitored items.
[in] | pSession | Session context for the function call |
[in] | monitoredItemIds | Array of Ids of the monitored items to delete |
[out] | results | Result array for the monitored items to delete |
OpcUa::HistoryServerCapabilitiesType * ServerManager::getHistoryServerCapabilities | ( | ) |
Returns the OPC UA HistoryServerCapabilities object.
The object is used to indicate the supported historical access features. The object will be created if it does not exist.
OpcUa_UInt32 ServerManager::getIdForWellKnownRole | ( | OpcUa_UInt32 | numericIdentifier | ) | const |
Get internal RoleId for the numeric identifier of a well known OPC UA defined Role.
< [in] Numeric identifier of a well known OPC UA defined Role
Session * ServerManager::getInternalSession | ( | ) |
Returns the default internal Session object with root rights.
This Session can be used for all internal calls like read, write and browse where the user rights may be checked by the responsible handlers like NodeManager or IOManager. This session has full access to all functionality.
If the action must be limited to a certain user or group, another internal session must be created with createInternalSession().
The following code provides an example for getting access to the ServerManager from any place in your OPC UA server application:
UaStatus ServerManager::getNamespaceTable | ( | UaStringArray & | sNamespaces | ) |
Get namespace array of server.
[out] | sNamespaces | List of namespace URIs |
NodeManager * ServerManager::getNodeManagerNS1 | ( | ) |
Returns the node manager object responsible for namespace index 1 nodes.
NodeManagerRoot * ServerManager::getNodeManagerRoot | ( | ) |
Returns the root node manager object.
UaStatus ServerManager::getRoleByName | ( | const UaString & | sRoleName, |
const UaString & | sNamespaceUri, | ||
RoleTypeOperations ** | ppRoleTypeOperations | ||
) | const |
Get role management object by role name and role name namespace URI.
< [out] The RoleTypeOperations object for the role if it was found
[in] | sRoleName | Name of the role to find |
[in] | sNamespaceUri | Namespace URI of the role to find. An empty URI is treated as index 0 or 1 |
UaStatus ServerManager::getRoleByNodeId | ( | const UaNodeId & | roleNodeId, |
RoleTypeOperations ** | ppRoleTypeOperations | ||
) | const |
Get role management object by role NodeId.
< [out] The RoleTypeOperations object for the role if it was found
[in] | roleNodeId | NodeId of the role to find |
UaStatus ServerManager::getRoleByRoleId | ( | const OpcUa_UInt32 | roleId, |
RoleTypeOperations ** | ppRoleTypeOperations | ||
) | const |
Get role management object by internal RoleId.
< [out] The RoleTypeOperations object for the role if it was found
[in] | roleId | Internal RoleId of the role to find |
OpcUa_UInt32 ServerManager::getRoleId | ( | const UaNodeId & | roleNodeId | ) | const |
Get internal RoleId for the Role NodeId.
< [in] NodeId of the role to find
UaNodeId ServerManager::getRoleNodeId | ( | OpcUa_UInt32 | roleId | ) | const |
Get Role NodeId for the internal RoleId.
< [in] Internal RoleId of the role to find
ServerConfig * ServerManager::getServerConfig | ( | ) |
Returns the server configuration object.
SessionManager * ServerManager::getSessionManager | ( | ) |
UaThreadPool * ServerManager::getThreadPool | ( | ) |
Returns the thread pool of the server core module.
UaStatus ServerManager::read | ( | Session * | pSession, |
OpcUa_Double | maxAge, | ||
const UaReadValueIds & | nodesToRead, | ||
UaDataValues & | results | ||
) |
Read function for internal use.
[in] | pSession | Session context for the function call |
[in] | maxAge | The maximum age of a cached value that can be returned to the caller |
[in] | nodesToRead | Array of nodes and attributes to read |
[out] | results | Array of read results |
UaStatus ServerManager::read | ( | Session * | pSession, |
OpcUa_Double | maxAge, | ||
const PVariableHandleArray & | variableHandles, | ||
const UaReadValueIds & | nodesToRead, | ||
UaDataValues & | results | ||
) |
Read function for internal use.
This overloaded version provides optimization for cyclic calls to Read by avoiding the repeated retrieval of the VariableHandle in each Read call. Instead, the VariableHandle should be looked up once in the responsible NodeManager. The returned VariableHandle can then be passed to this method in cyclic read calls.
[in] | pSession | Session context for the function call |
[in] | maxAge | The maximum age of a cached value that can be returned to the caller |
[in] | variableHandles | Array of variable handles indicating the node and attribute to read |
[in] | nodesToRead | Array of NodeIds and AttributeId to read. The NodeId and AttributeId are provided as additional information to the IOManager but are not used in the generic code. |
[out] | results | Array of read results |
void ServerManager::registerDynamicEventManager | ( | EventManager * | pEventManager | ) |
Inform the server manager about a new event manager added after server start-up.
EventManagers can be responsible for information requests from clients even if they are created after the client initiated the request. This happes especially if a client is interested in all events from the server and a new event manager is added. This method allows an EventManager to get informed about already created event subscriptions.
[in] | pEventManager | New and dynamically added EventManager |
UaStatus ServerManager::registerRole | ( | RoleTypeOperations * | pRoleTypeOperations | ) |
Register a Role with the RoleSet object.
[in] | pRoleTypeOperations | The RoleTypeOperations object for the role to register |
UaStatus ServerManager::removeRole | ( | RoleTypeOperations * | pRoleTypeOperations | ) |
Removes a Role from the role management of the server.
Removes the role management object from the address space and unregisters the role from the RoleSet object. If Sessions exist, the role mapping of the Sessions is updated.
[out] | pRoleTypeOperations | The RoleTypeOperations object for the role to remove |
void ServerManager::setEventManagerInvalid | ( | OpcUa_UInt32 | monitoredItemId, |
OpcUa_UInt32 | eventManagerIndex | ||
) |
Internal function to inform the event monitored item about an invalidated EventManager.
This information is provided through the EventCallback interface
[in] | monitoredItemId | Id of the affected monitored item |
[in] | eventManagerIndex | Index of the invalid EventManager |
UaStatus ServerManager::shutDown | ( | ) |
Shut down server manager.
OpcUa_UInt32 ServerManager::startServerShutDown | ( | OpcUa_Int32 | secondsTillShutdown, |
const UaLocalizedText & | shutdownReason | ||
) |
Inform the server manager about the shutdown of the server.
[in] | secondsTillShutdown | Seconds till shutdown of the server |
[in] | shutdownReason | Reason for the shutdown |
OpcUa_UInt32 ServerManager::startServerShutDown | ( | OpcUa_Int32 | secondsTillShutdown, |
const UaLocalizedTextArray & | shutdownReason | ||
) |
Inform the server manager about the shutdown of the server.
This is an overload to provide the shutdown reason as a list of localized text in different languages
[in] | secondsTillShutdown | Seconds till shutdown of the server |
[in] | shutdownReason | Reason for the shutdown in different languages |
UaStatus ServerManager::startUp | ( | ServerConfig * | pServerConfig | ) |
Start up server manager.
pServerConfig | Server configuration object. |
UaStatus ServerManager::unregisterRole | ( | RoleTypeOperations * | pRoleTypeOperations | ) |
Unregister a Role from the RoleSet object.
[in] | pRoleTypeOperations | The RoleTypeOperations object for the role to unregister |
UaStatus ServerManager::write | ( | Session * | pSession, |
const UaWriteValues & | nodesToWrite, | ||
UaStatusCodeArray & | results | ||
) |
Write function for internal use.
[in] | pSession | Session context for the function call |
[in] | nodesToWrite | Array of nodes, attributes and values to write |
[out] | results | Array of write results |
UaStatus ServerManager::write | ( | Session * | pSession, |
const PVariableHandleArray & | variableHandles, | ||
const UaWriteValues & | nodesToWrite, | ||
UaStatusCodeArray & | results | ||
) |
Write function for internal use.
This overloaded version provides optimization for cyclic calls to Write by avoiding the repeated retrieval of the VariableHandle in each Write call. Instead, the VariableHandle should be looked up once in the responsible NodeManager. The returned VariableHandle can then be passed to this method in cyclic write calls.
[in] | pSession | Session context for the function call |
[in] | variableHandles | Array of variable handles indicating the node and attribute to write |
[in] | nodesToWrite | Array of NodeIds, AttributeId and values to write. The NodeId and AttributeId are provided as additional information to the IOManager but are not used in the generic code. |
[out] | results | Array of write results |