You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2018/10/17 16:48:10 UTC
[incubator-plc4x] 03/19: implemented new api for ads protocol
This is an automated email from the ASF dual-hosted git repository.
cdutz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit b455aded8c4134656035e576796d2f76ab843757
Author: Andrey Skorikov <an...@codecentric.de>
AuthorDate: Thu Oct 4 11:26:34 2018 +0200
implemented new api for ads protocol
---
.../java/ads/connection/AdsAbstractPlcConnection.java | 18 +++++++++---------
.../java/ads/connection/AdsSerialPlcConnection.java | 2 +-
.../plc4x/java/ads/connection/AdsTcpPlcConnection.java | 14 +++++++-------
.../org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java | 4 ++--
.../org/apache/plc4x/java/ads/adslib/AmsRouter.java | 12 ++++++------
.../ads/connection/AdsAbstractPlcConnectionTest.java | 4 ++--
.../ads/connection/AdsSerialPlcConnectionTest.java | 2 +-
.../plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java | 4 ++--
8 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
index a80e5e7..5795a6f 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
@@ -92,7 +92,7 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
}
@Override
- public CompletableFuture<PlcReadResponse<?>> read(PlcReadRequest readRequest) {
+ public CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest) {
mapFields(readRequest);
CompletableFuture<InternalPlcReadResponse> readFuture = new CompletableFuture<>();
ChannelFuture channelFuture = channel.writeAndFlush(new PlcRequestContainer<>((InternalPlcReadRequest) readRequest, readFuture));
@@ -107,11 +107,11 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
@Override
public PlcReadRequest.Builder readRequestBuilder() {
- return new DefaultPlcReadRequest.Builder(new AdsPlcFieldHandler());
+ return new DefaultPlcReadRequest.Builder(this, new AdsPlcFieldHandler());
}
@Override
- public CompletableFuture<PlcWriteResponse<?>> write(PlcWriteRequest writeRequest) {
+ public CompletableFuture<PlcWriteResponse> write(PlcWriteRequest writeRequest) {
mapFields(writeRequest);
CompletableFuture<InternalPlcWriteResponse> writeFuture = new CompletableFuture<>();
ChannelFuture channelFuture = channel.writeAndFlush(new PlcRequestContainer<>((InternalPlcWriteRequest) writeRequest, writeFuture));
@@ -126,13 +126,13 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
@Override
public PlcWriteRequest.Builder writeRequestBuilder() {
- return new DefaultPlcWriteRequest.Builder(new AdsPlcFieldHandler());
+ return new DefaultPlcWriteRequest.Builder(this, new AdsPlcFieldHandler());
}
@Override
- public <PROP_REQUEST, PROP_RESPONSE> CompletableFuture<PlcProprietaryResponse<PlcProprietaryRequest<PROP_REQUEST>, PROP_RESPONSE>> send(PlcProprietaryRequest<PROP_REQUEST> proprietaryRequest) {
- CompletableFuture<InternalPlcProprietaryResponse<PROP_REQUEST, PROP_RESPONSE>> sendFuture = new CompletableFuture<>();
- ChannelFuture channelFuture = channel.writeAndFlush(new PlcRequestContainer<>((InternalPlcProprietaryRequest<PROP_REQUEST>) proprietaryRequest, sendFuture));
+ public <PROP_RESPONSE> CompletableFuture<PlcProprietaryResponse<PROP_RESPONSE>> send(PlcProprietaryRequest proprietaryRequest) {
+ CompletableFuture<InternalPlcProprietaryResponse<PROP_RESPONSE>> sendFuture = new CompletableFuture<>();
+ ChannelFuture channelFuture = channel.writeAndFlush(new PlcRequestContainer<>((InternalPlcProprietaryRequest) proprietaryRequest, sendFuture));
channelFuture.addListener(future -> {
if (!future.isSuccess()) {
sendFuture.completeExceptionally(future.cause());
@@ -168,9 +168,9 @@ public abstract class AdsAbstractPlcConnection extends AbstractPlcConnection imp
);
// TODO: This is blocking, should be changed to be async.
- CompletableFuture<InternalPlcProprietaryResponse<InternalPlcProprietaryRequest<AdsWriteRequest>, AdsReadWriteResponse>> getHandelFuture = new CompletableFuture<>();
+ CompletableFuture<InternalPlcProprietaryResponse<AdsReadWriteResponse>> getHandelFuture = new CompletableFuture<>();
channel.writeAndFlush(new PlcRequestContainer<>(new DefaultPlcProprietaryRequest<>(adsReadWriteRequest), getHandelFuture));
- InternalPlcProprietaryResponse<InternalPlcProprietaryRequest<AdsWriteRequest>, AdsReadWriteResponse> getHandleResponse = getFromFuture(getHandelFuture, SYMBOL_RESOLVE_TIMEOUT);
+ InternalPlcProprietaryResponse<AdsReadWriteResponse> getHandleResponse = getFromFuture(getHandelFuture, SYMBOL_RESOLVE_TIMEOUT);
AdsReadWriteResponse response = getHandleResponse.getResponse();
if (response.getResult().toAdsReturnCode() != AdsReturnCode.ADS_CODE_0) {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
index 06d52ca..cb2d00a 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnection.java
@@ -62,7 +62,7 @@ public class AdsSerialPlcConnection extends AdsAbstractPlcConnection {
pipeline.addLast(new SingleMessageRateLimiter());
pipeline.addLast(new Ads2PayloadProtocol());
pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, fieldMapping));
- pipeline.addLast(new SingleItemToSingleRequestProtocol(timer));
+ pipeline.addLast(new SingleItemToSingleRequestProtocol(AdsSerialPlcConnection.this, AdsSerialPlcConnection.this, timer));
}
};
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
index 80fb5bb..8433526 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
@@ -114,7 +114,7 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
pipeline.addLast(new Payload2TcpProtocol());
pipeline.addLast(new Ads2PayloadProtocol());
pipeline.addLast(new Plc4x2AdsProtocol(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, fieldMapping));
- pipeline.addLast(new SingleItemToSingleRequestProtocol(timer));
+ pipeline.addLast(new SingleItemToSingleRequestProtocol(AdsTcpPlcConnection.this, AdsTcpPlcConnection.this, timer)); // TODO: remove nulls; implement correctly
}
};
}
@@ -204,9 +204,9 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
// Send the request to the plc and wait for a response
// TODO: This is blocking, should be changed to be async.
- CompletableFuture<InternalPlcProprietaryResponse<InternalPlcProprietaryRequest<AdsAddDeviceNotificationRequest>, AdsAddDeviceNotificationResponse>> addDeviceFuture = new CompletableFuture<>();
+ CompletableFuture<InternalPlcProprietaryResponse<AdsAddDeviceNotificationResponse>> addDeviceFuture = new CompletableFuture<>();
channel.writeAndFlush(new PlcRequestContainer<>(new DefaultPlcProprietaryRequest<>(adsAddDeviceNotificationRequest), addDeviceFuture));
- InternalPlcProprietaryResponse<InternalPlcProprietaryRequest<AdsAddDeviceNotificationRequest>, AdsAddDeviceNotificationResponse> addDeviceResponse = getFromFuture(addDeviceFuture, ADD_DEVICE_TIMEOUT);
+ InternalPlcProprietaryResponse<AdsAddDeviceNotificationResponse> addDeviceResponse = getFromFuture(addDeviceFuture, ADD_DEVICE_TIMEOUT);
AdsAddDeviceNotificationResponse response = addDeviceResponse.getResponse();
// Abort if we got anything but a successful response.
@@ -241,11 +241,11 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
Invoke.NONE,
adsSubscriptionHandle.getNotificationHandle()
);
- CompletableFuture<InternalPlcProprietaryResponse<DefaultPlcProprietaryRequest<AdsDeleteDeviceNotificationRequest>, AdsDeleteDeviceNotificationResponse>> deleteDeviceFuture =
+ CompletableFuture<InternalPlcProprietaryResponse<AdsDeleteDeviceNotificationResponse>> deleteDeviceFuture =
new CompletableFuture<>();
channel.writeAndFlush(new PlcRequestContainer<>(new DefaultPlcProprietaryRequest<>(adsDeleteDeviceNotificationRequest), deleteDeviceFuture));
- InternalPlcProprietaryResponse<DefaultPlcProprietaryRequest<AdsDeleteDeviceNotificationRequest>, AdsDeleteDeviceNotificationResponse> deleteDeviceResponse =
+ InternalPlcProprietaryResponse<AdsDeleteDeviceNotificationResponse> deleteDeviceResponse =
getFromFuture(deleteDeviceFuture, DEL_DEVICE_TIMEOUT);
AdsDeleteDeviceNotificationResponse response = deleteDeviceResponse.getResponse();
if (response.getResult().toAdsReturnCode() != AdsReturnCode.ADS_CODE_0) {
@@ -311,12 +311,12 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
@Override
public PlcSubscriptionRequest.Builder subscriptionRequestBuilder() {
- return new DefaultPlcSubscriptionRequest.Builder(new AdsPlcFieldHandler());
+ return new DefaultPlcSubscriptionRequest.Builder(this, new AdsPlcFieldHandler());
}
@Override
public PlcUnsubscriptionRequest.Builder unsubscriptionRequestBuilder() {
- return new DefaultPlcUnsubscriptionRequest.Builder();
+ return new DefaultPlcUnsubscriptionRequest.Builder(this);
}
@Override
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
index b4da510..bca72a5 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
@@ -47,8 +47,8 @@ public class ManualPlc4XAdsTest {
PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
- CompletableFuture<PlcReadResponse<?>> response = reader.read(builder -> builder.addItem("station", "Allgemein_S2.Station:BYTE"));
- PlcReadResponse<?> readResponse = response.get();
+ CompletableFuture<PlcReadResponse> response = reader.read(builder -> builder.addItem("station", "Allgemein_S2.Station:BYTE"));
+ PlcReadResponse readResponse = response.get();
System.out.println("Response " + readResponse);
Collection<Integer> stations = readResponse.getAllIntegers("station");
stations.forEach(System.out::println);
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/adslib/AmsRouter.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/adslib/AmsRouter.java
index 935fc87..ed1ccc4 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/adslib/AmsRouter.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/adslib/AmsRouter.java
@@ -202,9 +202,9 @@ public class AmsRouter {
if (ads == null) {
return AmsError.of(AdsReturnCode.ADS_CODE_7);
}
- CompletableFuture<PlcProprietaryResponse<PlcProprietaryRequest<T>, R>> completableFuture = ads.send(plcProprietaryRequest);
+ CompletableFuture<PlcProprietaryResponse<R>> completableFuture = ads.send(plcProprietaryRequest);
try {
- PlcProprietaryResponse<PlcProprietaryRequest<T>, R> response = completableFuture.get(3, TimeUnit.SECONDS);
+ PlcProprietaryResponse<R> response = completableFuture.get(3, TimeUnit.SECONDS);
request.getResponseFuture().complete(response.getResponse());
return response.getResponse().getAmsHeader().getCode();
} catch (ExecutionException | TimeoutException e) {
@@ -229,9 +229,9 @@ public class AmsRouter {
}
AdsLibPort port = ports.get(plcProprietaryRequest.getProprietaryRequest().getAmsHeader().getSourceAmsPort().getAsInt());
- CompletableFuture<PlcProprietaryResponse<PlcProprietaryRequest<AdsAddDeviceNotificationRequest>, AdsAddDeviceNotificationResponse>> send = ads.send(plcProprietaryRequest);
+ CompletableFuture<PlcProprietaryResponse<AdsAddDeviceNotificationResponse>> send = ads.send(plcProprietaryRequest);
try {
- PlcProprietaryResponse<PlcProprietaryRequest<AdsAddDeviceNotificationRequest>, AdsAddDeviceNotificationResponse> response = send.get(3, TimeUnit.SECONDS);
+ PlcProprietaryResponse<AdsAddDeviceNotificationResponse> response = send.get(3, TimeUnit.SECONDS);
if (response.getResponse().getResult().toAdsReturnCode() != AdsReturnCode.ADS_CODE_0) {
return AmsError.of(response.getResponse().getResult().getAsLong());
}
@@ -258,9 +258,9 @@ public class AmsRouter {
}
AdsLibPort adsLibPort = ports.get(port);
- CompletableFuture<PlcProprietaryResponse<PlcProprietaryRequest<AdsDeleteDeviceNotificationRequest>, AdsDeleteDeviceNotificationResponse>> send = ads.send(plcProprietaryRequest);
+ CompletableFuture<PlcProprietaryResponse<AdsDeleteDeviceNotificationResponse>> send = ads.send(plcProprietaryRequest);
try {
- PlcProprietaryResponse<PlcProprietaryRequest<AdsDeleteDeviceNotificationRequest>, AdsDeleteDeviceNotificationResponse> response = send.get(3, TimeUnit.SECONDS);
+ PlcProprietaryResponse<AdsDeleteDeviceNotificationResponse> response = send.get(3, TimeUnit.SECONDS);
adsLibPort.DelNotification(pAddr, plcProprietaryRequest.getProprietaryRequest().getNotificationHandle());
request.getResponseFuture().complete(response.getResponse());
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
index 69ca500..8052624 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
@@ -123,7 +123,7 @@ public class AdsAbstractPlcConnectionTest {
@Test
public void read() {
- CompletableFuture<PlcReadResponse<?>> read = SUT.read(mock(InternalPlcReadRequest.class));
+ CompletableFuture<PlcReadResponse> read = SUT.read(mock(InternalPlcReadRequest.class));
assertNotNull(read);
simulatePipelineError(() -> SUT.read(mock(InternalPlcReadRequest.class)));
@@ -131,7 +131,7 @@ public class AdsAbstractPlcConnectionTest {
@Test
public void write() {
- CompletableFuture<PlcWriteResponse<?>> write = SUT.write(mock(InternalPlcWriteRequest.class));
+ CompletableFuture<PlcWriteResponse> write = SUT.write(mock(InternalPlcWriteRequest.class));
assertNotNull(write);
simulatePipelineError(() -> SUT.write(mock(InternalPlcWriteRequest.class)));
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
index a4a8825..9988da3 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
@@ -75,7 +75,7 @@ public class AdsSerialPlcConnectionTest {
@Test
public void testRead() throws Exception {
prepareSerialSimulator();
- CompletableFuture<PlcReadResponse<?>> read = SUT.read(builder -> builder.addItem("test", "0/0:BYTE"));
+ CompletableFuture<PlcReadResponse> read = SUT.read(builder -> builder.addItem("test", "0/0:BYTE"));
PlcReadResponse plcReadResponse = read.get(30, TimeUnit.SECONDS);
assertNotNull(plcReadResponse);
}
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java
index 95c6628..2cdd449 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/protocol/Plc4x2AdsProtocolTest.java
@@ -110,14 +110,14 @@ public class Plc4x2AdsProtocolTest {
.map(pair -> Stream.of(
ImmutablePair.of(
new PlcRequestContainer<>(
- (InternalPlcRequest) new DefaultPlcWriteRequest.Builder(new AdsPlcFieldHandler())
+ (InternalPlcRequest) new DefaultPlcWriteRequest.Builder(null, new AdsPlcFieldHandler()) // TODO: remove null
.addItem(RandomStringUtils.randomAscii(10), "1/1:" + pair.adsDataType, pair.getValue())
.build(), new CompletableFuture<>()),
AdsWriteResponse.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, Result.of(0))
),
ImmutablePair.of(
new PlcRequestContainer<>(
- (InternalPlcRequest) new DefaultPlcReadRequest.Builder(new AdsPlcFieldHandler())
+ (InternalPlcRequest) new DefaultPlcReadRequest.Builder(null, new AdsPlcFieldHandler()) // TODO: remove null
.addItem(RandomStringUtils.randomAscii(10), "1/1:" + pair.adsDataType)
.build(), new CompletableFuture<>()),
AdsReadResponse.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, Result.of(0), Data.of(pair.getByteRepresentation()))