use of org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode in project milo by eclipse.
the class BatchSetMonitoringMode method setMonitoringModeAsync.
private CompletableFuture<List<SetMonitoringModeResult>> setMonitoringModeAsync(List<Map.Entry<OpcUaMonitoredItem, MonitoringMode>> itemsAndModes) {
serviceInvocationCount.incrementAndGet();
MonitoringMode monitoringMode = itemsAndModes.get(0).getValue();
List<UaMonitoredItem> items = itemsAndModes.stream().map(Map.Entry::getKey).collect(Collectors.toList());
CompletableFuture<List<SetMonitoringModeResult>> resultsFuture = subscription.setMonitoringMode(monitoringMode, items).thenApply(statusCodes -> statusCodes.stream().map(statusCode -> new SetMonitoringModeResult(StatusCode.GOOD, statusCode)).collect(Collectors.toList()));
return resultsFuture.exceptionally(ex -> {
StatusCode serviceResult = UaException.extractStatusCode(ex).orElse(new StatusCode(StatusCodes.Bad_UnexpectedError));
SetMonitoringModeResult result = new SetMonitoringModeResult(serviceResult);
return Collections.nCopies(items.size(), result);
});
}
use of org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode 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);
}
}
use of org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode in project milo by eclipse.
the class TriggeringExample method createMonitoredItem.
private UaMonitoredItem createMonitoredItem(UaSubscription subscription, ReadValueId readValueId, MonitoringMode monitoringMode) throws ExecutionException, InterruptedException {
// important: client handle must be unique per item
UInteger clientHandle = uint(clientHandles.getAndIncrement());
MonitoringParameters parameters = new MonitoringParameters(clientHandle, 1000.0, null, uint(10), true);
MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(readValueId, monitoringMode, parameters);
UaSubscription.ItemCreationCallback onItemCreated = (item, id) -> item.setValueConsumer(this::onSubscriptionValue);
List<UaMonitoredItem> items = subscription.createMonitoredItems(TimestampsToReturn.Both, newArrayList(request), onItemCreated).get();
return items.get(0);
}
Aggregations