whenever my opcua client connects to server, All connected clients receive event notification.
I require, the clients who call the refresh method should only get notified, not all connected clients.
while connecting server i am calling refresh method. because i want all events & alarms which is currently on server.
Code: Select all
List<MonitoredItem> monitoredItems = new List<MonitoredItem>();
EventMonitoredItem monitoredItem = new EventMonitoredItem(ObjectIds.Server);
monitoredItem.SamplingInterval =250;
monitoredItem.QueueSize =1000;
monitoredItem.DiscardOldest = true;
monitoredItem.MonitoringMode = MonitoringMode.Reporting;
monitoredItem.Filter = new UnifiedAutomation.UaClient.ItemEventFilter(Subscription.Session.NamespaceUris);
monitoredItem.Filter.SelectClauses.Add(ObjectTypeIds.ConditionType, (QualifiedName[])null, NodeClass.Object);
monitoredItem.Filter.SelectClauses.Add(BrowseNames.EventId);
monitoredItem.Filter.SelectClauses.Add(BrowseNames.EventType);
monitoredItem.Filter.SelectClauses.Add(BrowseNames.ConditionName);
monitoredItem.Filter.SelectClauses.Add(BrowseNames.ConditionClassId);
monitoredItem.Filter.SelectClauses.Add(BrowseNames.Time);
monitoredItem.Filter.SelectClauses.Add(BrowseNames.Severity);
monitoredItem.Filter.SelectClauses.Add(BrowseNames.Comment);
monitoredItem.Filter.SelectClauses.Add(BrowseNames.EnabledState);
monitoredItem.Filter.WhereClauses.Add(FilterOperator.OfType, new LiteralOperand() { Value = new Variant(ObjectTypeIds.ConditionType) });
monitoredItems.Add(monitoredItem);
List<StatusCode> results = Subscription.CreateMonitoredItems(monitoredItems);
List<Variant> inputArguments = new List<Variant>();
inputArguments.Add(new Variant(Subscription.SubscriptionId));
List<StatusCode> inputArgumentErrors;
List<Variant> outputArguments;
Subscription.Session.Call(
ObjectTypeIds.ConditionType,
MethodIds.ConditionType_ConditionRefresh,
inputArguments,
new RequestSettings() { OperationTimeout = 10000 },
out inputArgumentErrors,
out outputArguments);