private Result <DataResponse>[] SubscribeDataValues(Session session, IDataValueSubscription dataValueSubscription, OpcUAQuery[] queries, NamespaceTable nsTable) { var responses = new Result <DataResponse> [queries.Length]; var browsePaths = queries.Select(a => ResolveRelativePath(a, nsTable)).ToArray(); Result <NodeId>[] nodeIdsResult = GetNodeIds(session, browsePaths, nsTable); var nodeIds = nodeIdsResult.Where(a => a.Success).Select(a => a.Value).ToArray(); var dataValues = dataValueSubscription.GetValues(nodeIds); var results = new Result <DataResponse> [nodeIds.Length]; for (int i = 0, j = 0; i < nodeIdsResult.Length; i++) { if (nodeIdsResult[i].Success) { if (dataValues[j].Success) { results[i] = ValueDataResponse.GetDataResponseForDataValue(_log, dataValues[j].Value, nodeIds[j], queries[i], browsePaths[i]); } else { results[i] = new Result <DataResponse>(dataValues[j].StatusCode, dataValues[j].Error); } j++; } else { results[i] = new Result <DataResponse>(nodeIdsResult[i].StatusCode, nodeIdsResult[i].Error); } } return(results); }
public Connection(Session session, IEventSubscription eventSubscription, IDataValueSubscription dataValueSubscription, ISubscriptionReaper subscriptionReaper, IEventDataResponse eventDataResponse) { _subscriptionReaper = subscriptionReaper; Session = session; EventSubscription = eventSubscription; DataValueSubscription = dataValueSubscription; EventDataResponse = eventDataResponse; }