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);
        }
示例#2
0
 public Connection(Session session, IEventSubscription eventSubscription, IDataValueSubscription dataValueSubscription, ISubscriptionReaper subscriptionReaper, IEventDataResponse eventDataResponse)
 {
     _subscriptionReaper   = subscriptionReaper;
     Session               = session;
     EventSubscription     = eventSubscription;
     DataValueSubscription = dataValueSubscription;
     EventDataResponse     = eventDataResponse;
 }