Beispiel #1
0
 /// <summary>
 /// Create api model from service model
 /// </summary>
 /// <param name="model"></param>
 public PublishedItemApiModel(PublishedItemModel model)
 {
     if (model == null)
     {
         throw new ArgumentNullException(nameof(model));
     }
     NodeId             = model.NodeId;
     BrowsePath         = model.BrowsePath;
     NodeAttribute      = model.NodeAttribute;
     SamplingInterval   = model.SamplingInterval;
     PublishingInterval = model.PublishingInterval;
 }
 /// <summary>
 /// Create api model from service model
 /// </summary>
 /// <param name="model"></param>
 public static PublishedItemApiModel ToApiModel(
     this PublishedItemModel model)
 {
     if (model == null)
     {
         return(null);
     }
     return(new PublishedItemApiModel {
         NodeId = model.NodeId,
         SamplingInterval = model.SamplingInterval,
         PublishingInterval = model.PublishingInterval
     });
 }
Beispiel #3
0
        /// <summary>
        /// Add or update item in job
        /// </summary>
        /// <param name="publishJob"></param>
        /// <param name="publishedItem"></param>
        /// <param name="endpointId"></param>
        /// <param name="connection"></param>
        private void AddOrUpdateItemInJob(WriterGroupJobModel publishJob,
                                          PublishedItemModel publishedItem, string endpointId, ConnectionModel connection)
        {
            // Simple - first remove - then add.
            RemoveItemFromJob(publishJob, publishedItem.NodeId, connection);

            // Find existing subscription we can add node to
            List <PublishedDataSetVariableModel> variables = null;

            foreach (var writer in publishJob.WriterGroup.DataSetWriters)
            {
                if (writer.DataSet.DataSetSource.Connection.IsSameAs(connection) &&
                    writer.DataSet.DataSetSource.SubscriptionSettings?.PublishingInterval ==
                    publishedItem.PublishingInterval)
                {
                    System.Diagnostics.Debug.Assert(writer.DataSet.DataSetSource.PublishedVariables.PublishedData != null);
                    variables = writer.DataSet.DataSetSource.PublishedVariables.PublishedData;
                    writer.DataSet.DataSetMetaData.ConfigurationVersion.MinorVersion++;
                    break;
                }
            }
            if (variables == null)
            {
                // No writer found - add new one with a published dataset
                var dataSetWriter = new DataSetWriterModel {
                    DataSetWriterId = GetDefaultId(endpointId),
                    DataSet         = new PublishedDataSetModel {
                        Name            = null,
                        DataSetMetaData = new DataSetMetaDataModel {
                            ConfigurationVersion = new ConfigurationVersionModel {
                                MajorVersion = 1,
                                MinorVersion = 0
                            },
                            DataSetClassId = Guid.NewGuid(),
                            Name           = endpointId
                        },
                        ExtensionFields = new Dictionary <string, string> {
                            ["EndpointId"] = endpointId
                        },
                        DataSetSource = new PublishedDataSetSourceModel {
                            Connection         = connection,
                            PublishedEvents    = null,
                            PublishedVariables = new PublishedDataItemsModel {
                                PublishedData = new List <PublishedDataSetVariableModel>()
                            },
                            SubscriptionSettings = new PublishedDataSetSettingsModel {
                                PublishingInterval = publishedItem.PublishingInterval,
                                // ...
                            }
                        }
                    },
                    MessageSettings             = null,
                    KeyFrameCount               = null,
                    DataSetFieldContentMask     = null,
                    DataSetMetaDataSendInterval = null,
                    KeyFrameInterval            = null
                };
                variables = dataSetWriter.DataSet.DataSetSource.PublishedVariables.PublishedData;
                publishJob.WriterGroup.DataSetWriters.Add(dataSetWriter);
            }

            // Add to published variable list items
            variables.Add(new PublishedDataSetVariableModel {
                SamplingInterval        = publishedItem.SamplingInterval,
                PublishedVariableNodeId = publishedItem.NodeId
            });
        }
Beispiel #4
0
        /// <summary>
        /// Add or update item in job
        /// </summary>
        /// <param name="publishJob"></param>
        /// <param name="publishedItem"></param>
        /// <param name="endpointId"></param>
        /// <param name="publisherId"></param>
        /// <param name="connection"></param>
        /// <param name="dataSetWriterName"></param>
        private void AddOrUpdateItemInJob(WriterGroupJobModel publishJob,
                                          PublishedItemModel publishedItem, string endpointId, string publisherId,
                                          ConnectionModel connection, string dataSetWriterName = null)
        {
            var dataSetWriterId =
                (string.IsNullOrEmpty(dataSetWriterName) ? GetDefaultId(endpointId) : dataSetWriterName) +
                (publishedItem.PublishingInterval.HasValue ?
                 ('_' + publishedItem.PublishingInterval.Value.TotalMilliseconds.ToString()) : String.Empty);

            // Simple - first remove - then add.
            RemoveItemFromJob(publishJob, publishedItem.NodeId, connection);

            // Find existing subscription we can add node to
            List <PublishedDataSetVariableModel> variables = null;

            foreach (var writer in publishJob.WriterGroup.DataSetWriters)
            {
                if (writer.DataSet.DataSetSource.Connection.IsSameAs(connection) &&
                    writer.DataSetWriterId == dataSetWriterId)
                {
                    System.Diagnostics.Debug.Assert(writer.DataSet.DataSetSource.PublishedVariables.PublishedData != null);
                    variables = writer.DataSet.DataSetSource.PublishedVariables.PublishedData;
                    writer.DataSet.DataSetMetaData.ConfigurationVersion.MinorVersion++;
                    break;
                }
            }
            if (variables == null)
            {
                // No writer found - add new one with a published dataset
                var dataSetWriter = new DataSetWriterModel {
                    DataSetWriterId = dataSetWriterId,
                    DataSet         = new PublishedDataSetModel {
                        Name            = null,
                        DataSetMetaData = new DataSetMetaDataModel {
                            ConfigurationVersion = new ConfigurationVersionModel {
                                MajorVersion = 1,
                                MinorVersion = 0
                            },
                            DataSetClassId = Guid.NewGuid(),
                            Name           = endpointId
                        },
                        ExtensionFields = new Dictionary <string, string> {
                            ["EndpointId"]  = endpointId,
                            ["PublisherId"] = publisherId,
                            // todo, probably not needed
                            ["DataSetWriterId"] = dataSetWriterId
                        },
                        DataSetSource = new PublishedDataSetSourceModel {
                            Connection         = connection,
                            PublishedEvents    = null,
                            PublishedVariables = new PublishedDataItemsModel {
                                PublishedData = new List <PublishedDataSetVariableModel>()
                            },
                            SubscriptionSettings = new PublishedDataSetSettingsModel {
                                PublishingInterval = publishedItem.PublishingInterval,
                                ResolveDisplayName = true
                                                     // ...
                            }
                        }
                    },
                    DataSetFieldContentMask =
                        DataSetFieldContentMask.StatusCode |
                        DataSetFieldContentMask.SourceTimestamp |
                        DataSetFieldContentMask.ServerTimestamp |
                        DataSetFieldContentMask.NodeId |
                        DataSetFieldContentMask.DisplayName |
                        DataSetFieldContentMask.ApplicationUri |
                        DataSetFieldContentMask.EndpointUrl |
                        DataSetFieldContentMask.ExtensionFields,
                    MessageSettings = new DataSetWriterMessageSettingsModel()
                    {
                        DataSetMessageContentMask =
                            DataSetContentMask.Timestamp |
                            DataSetContentMask.MetaDataVersion |
                            DataSetContentMask.Status |
                            DataSetContentMask.DataSetWriterId |
                            DataSetContentMask.MajorVersion |
                            DataSetContentMask.MinorVersion |
                            DataSetContentMask.SequenceNumber
                    },
                    //  TODO provide default settings
                    KeyFrameCount = null,
                    DataSetMetaDataSendInterval = null,
                    KeyFrameInterval            = null
                };
                variables = dataSetWriter.DataSet.DataSetSource.PublishedVariables.PublishedData;
                publishJob.WriterGroup.DataSetWriters.Add(dataSetWriter);
            }

            // Add to published variable list items
            variables.Add(new PublishedDataSetVariableModel {
                SamplingInterval             = publishedItem.SamplingInterval,
                PublishedVariableNodeId      = publishedItem.NodeId,
                PublishedVariableDisplayName = publishedItem.DisplayName,
                HeartbeatInterval            = publishedItem.HeartbeatInterval,
                QueueSize = 1,
            });
        }