-
Notifications
You must be signed in to change notification settings - Fork 919
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Set DefaultEncodingId in DataTypeDefinition, was always null NodeId (#…
…1523) - DefaultEncodingId is always set to binary encoding id. Helper added to StructureDefinition for other use cases (e.g. PubSub) - the default encoding id is derived for the encodeable factory, since the typetree does not contain sufficent information to find the proper binary encoding id - add a few helper functions in core for an upcoming PR that was used for testing with custom types, will simplify to add more nodemanagers to servers with custom types
- Loading branch information
Showing
8 changed files
with
311 additions
and
181 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/* Copyright (c) 1996-2020 The OPC Foundation. All rights reserved. | ||
The source code in this file is covered under a dual-license scenario: | ||
- RCL: for OPC Foundation members in good-standing | ||
- GPL V2: everybody else | ||
RCL license terms accompanied with this source code. See http://opcfoundation.org/License/RCL/1.00/ | ||
GNU General Public License as published by the Free Software Foundation; | ||
version 2 of the License are accompanied with this source code. See http://opcfoundation.org/License/GPLv2 | ||
This source code is distributed in the hope that it will be useful, | ||
but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
*/ | ||
|
||
using System; | ||
using System.Collections.Generic; | ||
using System.Text; | ||
using System.Xml; | ||
using System.Runtime.Serialization; | ||
|
||
namespace Opc.Ua | ||
{ | ||
#region StructureDefinition Class | ||
/// <summary> | ||
/// | ||
/// </summary> | ||
/// <exclude /> | ||
public partial class StructureDefinition : DataTypeDefinition | ||
{ | ||
/// <summary> | ||
/// Set the default encoding id for the requested data encoding. | ||
/// </summary> | ||
/// <param name="context">The system context with the encodeable factory.</param> | ||
/// <param name="typeId">The type id of the Data Type.</param> | ||
/// <param name="dataEncoding">The data encoding to apply to the default encoding id.</param> | ||
public void SetDefaultEncodingId(ISystemContext context, NodeId typeId, QualifiedName dataEncoding) | ||
{ | ||
if (context == null) throw new ArgumentNullException(nameof(context)); | ||
if (dataEncoding?.Name == BrowseNames.DefaultJson) | ||
{ | ||
DefaultEncodingId = ExpandedNodeId.ToNodeId(typeId, context.NamespaceUris); | ||
return; | ||
} | ||
|
||
// note: custom types must be added to the encodeable factory by the node manager to be found | ||
var systemType = context.EncodeableFactory?.GetSystemType(NodeId.ToExpandedNodeId(typeId, context.NamespaceUris)); | ||
if (systemType != null && Activator.CreateInstance(systemType) is IEncodeable encodeable) | ||
{ | ||
if (dataEncoding == null || dataEncoding.Name == BrowseNames.DefaultBinary) | ||
{ | ||
DefaultEncodingId = ExpandedNodeId.ToNodeId(encodeable.BinaryEncodingId, context.NamespaceUris); | ||
} | ||
else if (dataEncoding.Name == BrowseNames.DefaultXml) | ||
{ | ||
DefaultEncodingId = ExpandedNodeId.ToNodeId(encodeable.XmlEncodingId, context.NamespaceUris); | ||
} | ||
} | ||
} | ||
} | ||
#endregion | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters