Search in sources :

Example 1 with ModifyMonitoredItemsResponse

use of org.eclipse.milo.opcua.stack.core.types.structured.ModifyMonitoredItemsResponse in project milo by eclipse.

the class SubscriptionManager method modifyMonitoredItems.

public void modifyMonitoredItems(ServiceRequest service) throws UaException {
    ModifyMonitoredItemsRequest request = (ModifyMonitoredItemsRequest) service.getRequest();
    UInteger subscriptionId = request.getSubscriptionId();
    Subscription subscription = subscriptions.get(subscriptionId);
    TimestampsToReturn timestamps = request.getTimestampsToReturn();
    List<MonitoredItemModifyRequest> itemsToModify = l(request.getItemsToModify());
    if (subscription == null) {
        throw new UaException(StatusCodes.Bad_SubscriptionIdInvalid);
    }
    if (timestamps == null) {
        throw new UaException(StatusCodes.Bad_TimestampsToReturnInvalid);
    }
    if (itemsToModify.isEmpty()) {
        throw new UaException(StatusCodes.Bad_NothingToDo);
    }
    List<NodeId> distinctNodeIds = itemsToModify.stream().map(item -> {
        UInteger itemId = item.getMonitoredItemId();
        BaseMonitoredItem<?> monitoredItem = subscription.getMonitoredItems().get(itemId);
        return monitoredItem != null ? monitoredItem.getReadValueId().getNodeId() : NodeId.NULL_VALUE;
    }).filter(NodeId::isNotNull).distinct().collect(toList());
    CompletableFuture<Map<NodeId, AttributeGroup>> attributesFuture = readMonitoringAttributes(distinctNodeIds);
    attributesFuture.thenAccept(attributeGroups -> {
        MonitoredItemModifyResult[] modifyResults = new MonitoredItemModifyResult[itemsToModify.size()];
        List<BaseMonitoredItem<?>> monitoredItems = new ArrayList<>();
        for (int i = 0; i < itemsToModify.size(); i++) {
            MonitoredItemModifyRequest modifyRequest = itemsToModify.get(i);
            try {
                BaseMonitoredItem<?> monitoredItem = modifyMonitoredItem(modifyRequest, timestamps, subscription, attributeGroups);
                monitoredItems.add(monitoredItem);
                modifyResults[i] = new MonitoredItemModifyResult(StatusCode.GOOD, monitoredItem.getSamplingInterval(), uint(monitoredItem.getQueueSize()), monitoredItem.getFilterResult());
            } catch (UaException e) {
                modifyResults[i] = new MonitoredItemModifyResult(e.getStatusCode(), 0.0, UInteger.MIN, null);
            }
        }
        subscription.resetLifetimeCounter();
        /*
             * Notify AddressSpaces of the items we just modified.
             */
        byMonitoredItemType(monitoredItems, dataItems -> server.getAddressSpaceManager().onDataItemsModified(dataItems), eventItems -> server.getAddressSpaceManager().onEventItemsModified(eventItems));
        /*
             * AddressSpaces have been notified; send response.
             */
        ResponseHeader header = service.createResponseHeader();
        ModifyMonitoredItemsResponse response = new ModifyMonitoredItemsResponse(header, modifyResults, new DiagnosticInfo[0]);
        service.setResponse(response);
    });
}
Also used : AttributeKey(io.netty.util.AttributeKey) MonitoringParameters(org.eclipse.milo.opcua.stack.core.types.structured.MonitoringParameters) ReadContext(org.eclipse.milo.opcua.sdk.server.api.services.AttributeServices.ReadContext) DeadbandType(org.eclipse.milo.opcua.stack.core.types.enumerated.DeadbandType) DataItem(org.eclipse.milo.opcua.sdk.server.api.DataItem) LoggerFactory(org.slf4j.LoggerFactory) ExtensionObject(org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject) PublishRequest(org.eclipse.milo.opcua.stack.core.types.structured.PublishRequest) MonitoredItemCreateRequest(org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemCreateRequest) QualifiedName(org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName) Unsigned.uint(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint) Map(java.util.Map) AttributeId(org.eclipse.milo.opcua.stack.core.AttributeId) CreateSubscriptionResponse(org.eclipse.milo.opcua.stack.core.types.structured.CreateSubscriptionResponse) ModifySubscriptionRequest(org.eclipse.milo.opcua.stack.core.types.structured.ModifySubscriptionRequest) EnumSet(java.util.EnumSet) Reference(org.eclipse.milo.opcua.sdk.core.Reference) EventItem(org.eclipse.milo.opcua.sdk.server.api.EventItem) DataChangeFilter(org.eclipse.milo.opcua.stack.core.types.structured.DataChangeFilter) TimestampsToReturn(org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn) NodeId(org.eclipse.milo.opcua.stack.core.types.builtin.NodeId) UByte(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UByte) ModifyMonitoredItemsRequest(org.eclipse.milo.opcua.stack.core.types.structured.ModifyMonitoredItemsRequest) NumericRange(org.eclipse.milo.opcua.sdk.core.NumericRange) MonitoringFilter(org.eclipse.milo.opcua.stack.core.types.structured.MonitoringFilter) RepublishResponse(org.eclipse.milo.opcua.stack.core.types.structured.RepublishResponse) UaNode(org.eclipse.milo.opcua.sdk.server.nodes.UaNode) ReadValueId(org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId) OpcUaServer(org.eclipse.milo.opcua.sdk.server.OpcUaServer) SetPublishingModeResponse(org.eclipse.milo.opcua.stack.core.types.structured.SetPublishingModeResponse) SubscriptionAcknowledgement(org.eclipse.milo.opcua.stack.core.types.structured.SubscriptionAcknowledgement) DiagnosticInfo(org.eclipse.milo.opcua.stack.core.types.builtin.DiagnosticInfo) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) SetMonitoringModeRequest(org.eclipse.milo.opcua.stack.core.types.structured.SetMonitoringModeRequest) Stream(java.util.stream.Stream) StatusCode(org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode) StreamUtil.opt2stream(org.eclipse.milo.opcua.sdk.core.util.StreamUtil.opt2stream) DeleteSubscriptionsResponse(org.eclipse.milo.opcua.stack.core.types.structured.DeleteSubscriptionsResponse) CreateSubscriptionRequest(org.eclipse.milo.opcua.stack.core.types.structured.CreateSubscriptionRequest) Identifiers(org.eclipse.milo.opcua.stack.core.Identifiers) MonitoringMode(org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode) State(org.eclipse.milo.opcua.sdk.server.subscriptions.Subscription.State) SetMonitoringModeResponse(org.eclipse.milo.opcua.stack.core.types.structured.SetMonitoringModeResponse) EventFilter(org.eclipse.milo.opcua.stack.core.types.structured.EventFilter) DataValue(org.eclipse.milo.opcua.stack.core.types.builtin.DataValue) NotificationMessage(org.eclipse.milo.opcua.stack.core.types.structured.NotificationMessage) MonitoredEventItem(org.eclipse.milo.opcua.sdk.server.items.MonitoredEventItem) CreateMonitoredItemsResponse(org.eclipse.milo.opcua.stack.core.types.structured.CreateMonitoredItemsResponse) RepublishRequest(org.eclipse.milo.opcua.stack.core.types.structured.RepublishRequest) HashMap(java.util.HashMap) CompletableFuture(java.util.concurrent.CompletableFuture) ModifyMonitoredItemsResponse(org.eclipse.milo.opcua.stack.core.types.structured.ModifyMonitoredItemsResponse) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) Session(org.eclipse.milo.opcua.sdk.server.Session) ArrayList(java.util.ArrayList) AccessLevel(org.eclipse.milo.opcua.sdk.core.AccessLevel) Lists(com.google.common.collect.Lists) MonitoredItemModifyRequest(org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemModifyRequest) ServiceRequest(org.eclipse.milo.opcua.stack.server.services.ServiceRequest) ConversionUtil.l(org.eclipse.milo.opcua.stack.core.util.ConversionUtil.l) DeleteSubscriptionsRequest(org.eclipse.milo.opcua.stack.core.types.structured.DeleteSubscriptionsRequest) SetTriggeringResponse(org.eclipse.milo.opcua.stack.core.types.structured.SetTriggeringResponse) DeleteMonitoredItemsRequest(org.eclipse.milo.opcua.stack.core.types.structured.DeleteMonitoredItemsRequest) DeleteMonitoredItemsResponse(org.eclipse.milo.opcua.stack.core.types.structured.DeleteMonitoredItemsResponse) StatusCodes(org.eclipse.milo.opcua.stack.core.StatusCodes) Logger(org.slf4j.Logger) Lists.newArrayListWithCapacity(com.google.common.collect.Lists.newArrayListWithCapacity) Iterator(java.util.Iterator) MonitoredDataItem(org.eclipse.milo.opcua.sdk.server.items.MonitoredDataItem) UInteger(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger) MonitoredItemModifyResult(org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemModifyResult) UaSerializationException(org.eclipse.milo.opcua.stack.core.UaSerializationException) SetTriggeringRequest(org.eclipse.milo.opcua.stack.core.types.structured.SetTriggeringRequest) Maps(com.google.common.collect.Maps) Unsigned.ubyte(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.ubyte) MonitoredItemCreateResult(org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemCreateResult) Consumer(java.util.function.Consumer) MonitoredItem(org.eclipse.milo.opcua.sdk.server.api.MonitoredItem) CreateMonitoredItemsRequest(org.eclipse.milo.opcua.stack.core.types.structured.CreateMonitoredItemsRequest) AtomicLong(java.util.concurrent.atomic.AtomicLong) BaseMonitoredItem(org.eclipse.milo.opcua.sdk.server.items.BaseMonitoredItem) SetPublishingModeRequest(org.eclipse.milo.opcua.stack.core.types.structured.SetPublishingModeRequest) Collectors.toList(java.util.stream.Collectors.toList) ModifySubscriptionResponse(org.eclipse.milo.opcua.stack.core.types.structured.ModifySubscriptionResponse) UaException(org.eclipse.milo.opcua.stack.core.UaException) ResponseHeader(org.eclipse.milo.opcua.stack.core.types.structured.ResponseHeader) MonitoredItemModifyRequest(org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemModifyRequest) ResponseHeader(org.eclipse.milo.opcua.stack.core.types.structured.ResponseHeader) BaseMonitoredItem(org.eclipse.milo.opcua.sdk.server.items.BaseMonitoredItem) MonitoredItemModifyResult(org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemModifyResult) UaException(org.eclipse.milo.opcua.stack.core.UaException) TimestampsToReturn(org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn) ArrayList(java.util.ArrayList) Unsigned.uint(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint) ModifyMonitoredItemsRequest(org.eclipse.milo.opcua.stack.core.types.structured.ModifyMonitoredItemsRequest) ModifyMonitoredItemsResponse(org.eclipse.milo.opcua.stack.core.types.structured.ModifyMonitoredItemsResponse) UInteger(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger) NodeId(org.eclipse.milo.opcua.stack.core.types.builtin.NodeId) Map(java.util.Map) HashMap(java.util.HashMap)

Example 2 with ModifyMonitoredItemsResponse

use of org.eclipse.milo.opcua.stack.core.types.structured.ModifyMonitoredItemsResponse in project milo by eclipse.

the class OpcUaSubscription method modifyMonitoredItems.

@Override
public CompletableFuture<List<StatusCode>> modifyMonitoredItems(TimestampsToReturn timestampsToReturn, List<MonitoredItemModifyRequest> itemsToModify) {
    CompletableFuture<ModifyMonitoredItemsResponse> future = client.modifyMonitoredItems(subscriptionId, timestampsToReturn, itemsToModify);
    return future.thenApply(response -> {
        List<StatusCode> statusCodes = newArrayList();
        List<MonitoredItemModifyResult> results = l(response.getResults());
        for (int i = 0; i < results.size(); i++) {
            MonitoredItemModifyRequest request = itemsToModify.get(i);
            MonitoredItemModifyResult result = results.get(i);
            StatusCode statusCode = result.getStatusCode();
            OpcUaMonitoredItem item = itemsByServerHandle.get(request.getMonitoredItemId());
            if (item != null) {
                item.setStatusCode(statusCode);
                if (statusCode.isGood()) {
                    item.setTimestamps(timestampsToReturn);
                    item.setRevisedSamplingInterval(result.getRevisedSamplingInterval());
                    item.setRevisedQueueSize(result.getRevisedQueueSize());
                    item.setFilterResult(result.getFilterResult());
                    item.setDiscardOldest(request.getRequestedParameters().getDiscardOldest());
                    item.setRequestedFilter(request.getRequestedParameters().getFilter());
                    item.setRequestedSamplingInterval(request.getRequestedParameters().getSamplingInterval());
                    item.setRequestedQueueSize(request.getRequestedParameters().getQueueSize());
                }
            }
            statusCodes.add(statusCode);
        }
        return statusCodes;
    });
}
Also used : MonitoredItemModifyRequest(org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemModifyRequest) ModifyMonitoredItemsResponse(org.eclipse.milo.opcua.stack.core.types.structured.ModifyMonitoredItemsResponse) MonitoredItemModifyResult(org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemModifyResult) StatusCode(org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode) Unsigned.uint(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint)

Aggregations

Lists (com.google.common.collect.Lists)1 Lists.newArrayListWithCapacity (com.google.common.collect.Lists.newArrayListWithCapacity)1 Maps (com.google.common.collect.Maps)1 AttributeKey (io.netty.util.AttributeKey)1 ArrayList (java.util.ArrayList)1 EnumSet (java.util.EnumSet)1 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Map (java.util.Map)1 CompletableFuture (java.util.concurrent.CompletableFuture)1 AtomicLong (java.util.concurrent.atomic.AtomicLong)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 Consumer (java.util.function.Consumer)1 Function (java.util.function.Function)1 Collectors.toList (java.util.stream.Collectors.toList)1 Stream (java.util.stream.Stream)1 AccessLevel (org.eclipse.milo.opcua.sdk.core.AccessLevel)1 NumericRange (org.eclipse.milo.opcua.sdk.core.NumericRange)1 Reference (org.eclipse.milo.opcua.sdk.core.Reference)1