private Result <DataResponse>[] ReadEvents(Session session, IEventDataResponse eventDataResponse, OpcUAQuery[] opcUAQuery, NamespaceTable namespaceTable) { var nodeCache = _nodeCacheFactory.Create(session); var browsePaths = opcUAQuery.Select(a => ResolveRelativePath(a, namespaceTable)).ToArray(); Result <NodeId>[] nodeIdsResult = GetNodeIds(session, browsePaths, namespaceTable); var results = new Result <DataResponse> [opcUAQuery.Length]; // Do one by one for now. unsure of use-case with multiple node ids for same filter. for (int i = 0; i < opcUAQuery.Length; i++) { var nodeIdResult = nodeIdsResult[i]; if (nodeIdResult.Success) { var query = opcUAQuery[i]; var tr = query.timeRange; //var nodeId = Converter.GetNodeId(query.nodeId, namespaceTable); DateTime fromTime = DateTimeOffset.FromUnixTimeMilliseconds(tr.FromEpochMS).UtcDateTime; DateTime toTime = DateTimeOffset.FromUnixTimeMilliseconds(tr.ToEpochMS).UtcDateTime; var eventFilter = Converter.GetEventFilter(query, namespaceTable); var response = session.ReadEvents(fromTime, toTime, uint.MaxValue, eventFilter, new[] { nodeIdResult.Value }); results[i] = eventDataResponse.CreateEventDataResponse(response[0], query, nodeCache); } else { results[i] = new Result <DataResponse>(nodeIdResult.StatusCode, nodeIdResult.Error); } } return(results); }
public Result <DataResponse> GetEventData(OpcUAQuery query, NodeId startNodeId, Opc.Ua.EventFilter eventFilter) { var nodeCache = _nodeCacheFactory.Create(_session); eventFilter.AddSelectClause(ObjectTypeIds.BaseEventType, "SourceNode"); eventFilter.AddSelectClause(ObjectTypeIds.BaseEventType, "EventType"); var eventFilterValues = GetEventFilterValues(startNodeId, eventFilter); if (eventFilterValues == null) { var monitorItem = AddMonitorItem(startNodeId, eventFilter); eventFilterValues = new EventFilterValues(monitorItem, query, eventFilter); if (!TryAddEventFilterValues(startNodeId, eventFilterValues)) { RemoveMonitorItem(monitorItem); eventFilterValues = null; } } lock (_eventData) { if (eventFilterValues == null) { eventFilterValues = GetEventFilterValues(startNodeId, eventFilter); } if (eventFilterValues != null) { return(_eventDataResponse.CreateEventSubscriptionDataResponse(eventFilterValues.Values.Values, query, nodeCache)); } } return(new Result <DataResponse>(StatusCodes.BadUnexpectedError, "")); }