Search in sources :

Example 1 with SetMonitoringModeRequest

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

the class SubscriptionManager method setMonitoringMode.

public void setMonitoringMode(ServiceRequest service) {
    SetMonitoringModeRequest request = (SetMonitoringModeRequest) service.getRequest();
    UInteger subscriptionId = request.getSubscriptionId();
    try {
        Subscription subscription = subscriptions.get(subscriptionId);
        List<UInteger> itemsToModify = l(request.getMonitoredItemIds());
        if (subscription == null) {
            throw new UaException(StatusCodes.Bad_SubscriptionIdInvalid);
        }
        if (itemsToModify.isEmpty()) {
            throw new UaException(StatusCodes.Bad_NothingToDo);
        }
        /*
             * Set MonitoringMode on each monitored item, if it exists.
             */
        MonitoringMode monitoringMode = request.getMonitoringMode();
        StatusCode[] results = new StatusCode[itemsToModify.size()];
        List<MonitoredItem> modified = newArrayListWithCapacity(itemsToModify.size());
        for (int i = 0; i < itemsToModify.size(); i++) {
            UInteger itemId = itemsToModify.get(i);
            BaseMonitoredItem<?> item = subscription.getMonitoredItems().get(itemId);
            if (item != null) {
                item.setMonitoringMode(monitoringMode);
                modified.add(item);
                results[i] = StatusCode.GOOD;
            } else {
                results[i] = new StatusCode(StatusCodes.Bad_MonitoredItemIdInvalid);
            }
        }
        /*
             * Notify AddressSpace of the items whose MonitoringMode has been modified.
             */
        server.getAddressSpaceManager().onMonitoringModeChanged(modified);
        /*
             * Build and return results.
             */
        ResponseHeader header = service.createResponseHeader();
        SetMonitoringModeResponse response = new SetMonitoringModeResponse(header, results, new DiagnosticInfo[0]);
        service.setResponse(response);
    } catch (UaException e) {
        service.setServiceFault(e);
    }
}
Also used : ResponseHeader(org.eclipse.milo.opcua.stack.core.types.structured.ResponseHeader) SetMonitoringModeResponse(org.eclipse.milo.opcua.stack.core.types.structured.SetMonitoringModeResponse) UaException(org.eclipse.milo.opcua.stack.core.UaException) SetMonitoringModeRequest(org.eclipse.milo.opcua.stack.core.types.structured.SetMonitoringModeRequest) StatusCode(org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode) Unsigned.uint(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint) MonitoredItem(org.eclipse.milo.opcua.sdk.server.api.MonitoredItem) BaseMonitoredItem(org.eclipse.milo.opcua.sdk.server.items.BaseMonitoredItem) UInteger(org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger) MonitoringMode(org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode)

Aggregations

MonitoredItem (org.eclipse.milo.opcua.sdk.server.api.MonitoredItem)1 BaseMonitoredItem (org.eclipse.milo.opcua.sdk.server.items.BaseMonitoredItem)1 UaException (org.eclipse.milo.opcua.stack.core.UaException)1 StatusCode (org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode)1 UInteger (org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger)1 Unsigned.uint (org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint)1 MonitoringMode (org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode)1 ResponseHeader (org.eclipse.milo.opcua.stack.core.types.structured.ResponseHeader)1 SetMonitoringModeRequest (org.eclipse.milo.opcua.stack.core.types.structured.SetMonitoringModeRequest)1 SetMonitoringModeResponse (org.eclipse.milo.opcua.stack.core.types.structured.SetMonitoringModeResponse)1