in src/Azure.IIoT.OpcUa/src/Publisher/Extensions/PublishedNodesEntryModelEx.cs [290:440]
public static string GetUniqueDataSetWriterId(this PublishedNodesEntryModel model,
TimeSpan? publishingInterval = null)
{
var id = new StringBuilder();
if (!string.IsNullOrEmpty(model.DataSetWriterId))
{
id.Append(model.DataSetWriterId);
}
if (!string.IsNullOrEmpty(model.EndpointUrl))
{
id.Append(model.EndpointUrl);
}
if (model.UseReverseConnect == true)
{
id.AppendLine();
}
if (model.DisableSubscriptionTransfer == true)
{
id.AppendLine();
}
var securityMode = model.EndpointSecurityMode ??
((model.UseSecurity ?? false) ? SecurityMode.NotNone : SecurityMode.None);
if (securityMode != SecurityMode.None)
{
id.Append(securityMode);
}
if (!string.IsNullOrEmpty(model.EndpointSecurityPolicy))
{
id.Append(model.EndpointSecurityPolicy);
}
if (model.OpcAuthenticationMode != OpcAuthenticationMode.Anonymous)
{
id.Append(model.OpcAuthenticationMode);
}
if (!string.IsNullOrEmpty(model.OpcAuthenticationUsername))
{
id.Append(model.OpcAuthenticationUsername);
}
if (!string.IsNullOrEmpty(model.OpcAuthenticationPassword))
{
id.Append(model.OpcAuthenticationPassword.ToSha1Hash());
}
if (!string.IsNullOrEmpty(model.EncryptedAuthUsername))
{
id.Append(model.EncryptedAuthUsername);
}
if (!string.IsNullOrEmpty(model.EncryptedAuthPassword))
{
id.Append(model.EncryptedAuthPassword.ToSha1Hash());
}
if (!string.IsNullOrEmpty(model.DataSetName))
{
id.Append(model.DataSetName);
}
var publishingIntervalResolved = publishingInterval ??
model.GetNormalizedDataSetPublishingInterval();
if (publishingIntervalResolved != null)
{
id.Append(publishingIntervalResolved.Value.TotalMilliseconds);
}
if (model.DataSetClassId != Guid.Empty)
{
id.Append(model.DataSetClassId);
}
if (model.DataSetKeyFrameCount != null)
{
id.Append(model.DataSetKeyFrameCount.Value);
}
if (model.DisableSubscriptionTransfer != null)
{
id.Append(model.DisableSubscriptionTransfer.Value);
}
if (model.SendKeepAliveDataSetMessages)
{
id.AppendLine();
}
if (model.Priority != null)
{
id.Append(model.Priority.Value);
}
if (model.MaxKeepAliveCount != null)
{
id.Append(model.MaxKeepAliveCount.Value);
}
var metadataUpdateTime = model.GetNormalizedMetaDataUpdateTime();
if (metadataUpdateTime != null)
{
id.Append(metadataUpdateTime.Value.TotalMilliseconds);
}
var samplingInterval = model.GetNormalizedDataSetSamplingInterval();
if (samplingInterval != null)
{
id.Append(samplingInterval.Value.TotalMilliseconds);
}
var heartbeatInterval = model.GetNormalizedDefaultHeartbeatInterval();
if (heartbeatInterval != null)
{
id.Append(heartbeatInterval.Value.TotalMilliseconds);
}
if (model.DefaultHeartbeatBehavior != null)
{
id.Append(model.DefaultHeartbeatBehavior.Value);
}
if (model.QualityOfService != null)
{
id.Append(model.QualityOfService.Value);
}
if (!string.IsNullOrEmpty(model.QueueName))
{
id.Append(model.QueueName);
}
if (!string.IsNullOrEmpty(model.MetaDataQueueName))
{
id.Append(model.MetaDataQueueName);
}
if ((model.DataSetRouting ?? DataSetRoutingMode.None)
!= DataSetRoutingMode.None)
{
id.Append(model.DataSetRouting.ToString());
}
if (model.RepublishAfterTransfer != null)
{
id.Append(model.RepublishAfterTransfer.Value);
}
if (model.OpcNodeWatchdogTimespan != null)
{
id.Append(model.OpcNodeWatchdogTimespan.Value);
}
if (model.DataSetWriterWatchdogBehavior != null)
{
id.Append(model.DataSetWriterWatchdogBehavior.Value);
}
if (model.OpcNodeWatchdogCondition != null)
{
id.Append(model.OpcNodeWatchdogCondition.Value);
}
if (model.DataSetFetchDisplayNames != null)
{
id.Append(model.DataSetFetchDisplayNames.Value);
}
if (model.MessageTtlTimespan != null)
{
id.Append(model.MessageTtlTimespan.Value);
}
if (model.MessageRetention == true)
{
id.AppendLine();
}
Debug.Assert(id.Length != 0); // Should always have an endpoint mixed in
return id.ToString().ToSha1Hash();
}