You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by hu...@apache.org on 2021/03/05 10:02:20 UTC

[plc4x] 01/01: Fix for opcua subscription

This is an automated email from the ASF dual-hosted git repository.

hutcheb pushed a commit to branch bug/opcua_subscription
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 67de5bac87866fb09c82347893333e349968b40a
Author: hutcheb <be...@gmail.com>
AuthorDate: Fri Mar 5 05:01:36 2021 -0500

    Fix for opcua subscription
---
 .../java/opcua/connection/OpcuaTcpPlcConnection.java     |  5 +++--
 .../org/apache/plc4x/java/opcua/protocol/OpcuaField.java | 16 +++++++++++++++-
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
index 9e06022..5d86d69 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
@@ -32,6 +32,7 @@ import org.apache.plc4x.java.opcua.protocol.OpcuaSubsriptionHandle;
 import org.apache.plc4x.java.spi.messages.*;
 import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
 import org.apache.plc4x.java.spi.model.DefaultPlcConsumerRegistration;
+import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField;
 import org.apache.plc4x.java.spi.values.*;
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
 import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfig;
@@ -384,8 +385,8 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
         CompletableFuture<PlcSubscriptionResponse> future = CompletableFuture.supplyAsync(() -> {
             Map<String, ResponseItem<PlcSubscriptionHandle>> responseItems = new HashMap<>();
             for (String fieldName : subscriptionRequest.getFieldNames()) {
-                final PlcSubscriptionField subscriptionField = subscriptionRequest.getField(fieldName);
-                final OpcuaField field = (OpcuaField) Objects.requireNonNull(subscriptionField);
+                final DefaultPlcSubscriptionField subscriptionField = (DefaultPlcSubscriptionField) subscriptionRequest.getField(fieldName);
+                final OpcuaField field = (OpcuaField) Objects.requireNonNull(subscriptionField.getPlcField());
                 long cycleTime = subscriptionField.getDuration().orElse(Duration.ofSeconds(1)).toMillis();
                 NodeId idNode = generateNodeId(field);
                 ReadValueId readValueId = new ReadValueId(
diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaField.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaField.java
index f90ffaa..7f186f7 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaField.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/protocol/OpcuaField.java
@@ -21,16 +21,20 @@ package org.apache.plc4x.java.opcua.protocol;
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.exceptions.PlcUnsupportedDataTypeException;
 import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionField;
+import org.apache.plc4x.java.api.types.PlcSubscriptionType;
 import org.apache.plc4x.java.opcua.readwrite.types.OpcuaIdentifierType;
 import org.apache.plc4x.java.opcua.readwrite.types.OpcuaDataType;
 
+import java.time.Duration;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 /**
  */
-public class OpcuaField implements PlcField {
+public class OpcuaField implements PlcSubscriptionField {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("^ns=(?<namespace>\\d+);(?<identifierType>[isgb])=((?<identifier>[^:]+))?(:(?<datatype>[a-zA-Z_]+))?");
 
@@ -135,4 +139,14 @@ public class OpcuaField implements PlcField {
             "identifier=" + identifier +
             '}';
     }
+
+    @Override
+    public PlcSubscriptionType getPlcSubscriptionType() {
+        return null;
+    }
+
+    @Override
+    public Optional<Duration> getDuration() {
+        return Optional.empty();
+    }
 }