@Override
public CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest subscriptionRequest) {
InternalPlcSubscriptionRequest request = checkInternal(subscriptionRequest, InternalPlcSubscriptionRequest.class);
LinkedHashMap<String, SubscriptionPlcField> subscriptionPlcFieldMap = request.getSubscriptionPlcFieldMap();
Map<String, Pair<PlcResponseCode, PlcSubscriptionHandle>> values = new HashMap<>();
subscriptionPlcFieldMap.forEach((name, subscriptionPlcField) -> {
InternalPlcSubscriptionHandle handle = new DefaultPlcSubscriptionHandle(this);
switch (subscriptionPlcField.getPlcSubscriptionType()) {
case CYCLIC:
device.addCyclicSubscription(dispatchSubscriptionEvent(name, handle), handle, (TestField) subscriptionPlcField.getPlcField(), subscriptionPlcField.getDuration().orElseThrow(RuntimeException::new));
break;
case CHANGE_OF_STATE:
device.addChangeOfStateSubscription(dispatchSubscriptionEvent(name, handle), handle, (TestField) subscriptionPlcField.getPlcField());
break;
case EVENT:
device.addEventSubscription(dispatchSubscriptionEvent(name, handle), handle, (TestField) subscriptionPlcField.getPlcField());
break;
}
values.put(name, Pair.of(PlcResponseCode.OK, handle));
});
PlcSubscriptionResponse response = new DefaultPlcSubscriptionResponse(request, values);
return CompletableFuture.completedFuture(response);
}