From 5e7fcafb331ce35ce74a4923dbc7db82164d4522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Dywicki?= Date: Wed, 25 Sep 2024 14:00:55 +0200 Subject: [PATCH] Fix compile errors in golang opcua driver. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ɓukasz Dywicki --- plc4go/internal/opcua/Reader.go | 3 ++- plc4go/internal/opcua/SubscriptionHandle.go | 6 +++--- plc4go/internal/opcua/Writer.go | 15 +++++---------- plc4go/internal/opcua/common.go | 11 ++++++----- 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/plc4go/internal/opcua/Reader.go b/plc4go/internal/opcua/Reader.go index 2c222c56072..71230b4d0e3 100644 --- a/plc4go/internal/opcua/Reader.go +++ b/plc4go/internal/opcua/Reader.go @@ -22,9 +22,10 @@ package opcua import ( "context" "encoding/binary" + "runtime/debug" + "github.com/pkg/errors" "github.com/rs/zerolog" - "runtime/debug" apiModel "github.com/apache/plc4x/plc4go/pkg/api/model" readWriteModel "github.com/apache/plc4x/plc4go/protocols/opcua/readwrite/model" diff --git a/plc4go/internal/opcua/SubscriptionHandle.go b/plc4go/internal/opcua/SubscriptionHandle.go index b92b6b1ff07..b777a6a4b4a 100644 --- a/plc4go/internal/opcua/SubscriptionHandle.go +++ b/plc4go/internal/opcua/SubscriptionHandle.go @@ -158,7 +158,7 @@ func (h *SubscriptionHandle) onSubscribeCreateMonitoredItemsRequest() (readWrite responseChan := make(chan readWriteModel.CreateMonitoredItemsResponse, 100) // TODO: bit oversized to not block anything. Discards errors errorChan := make(chan error, 100) // TODO: bit oversized to not block anything. Discards errors consumer := func(opcuaResponse []byte) { - unknownExtensionObject, err := readWriteModel.ExtensionObjectParseWithBuffer(ctx, utils.NewReadBufferByteBased(opcuaResponse, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian)), false) + unknownExtensionObject, err := readWriteModel.ExtensionObjectParseWithBuffer[readWriteModel.ExtensionObject](ctx, utils.NewReadBufferByteBased(opcuaResponse, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian)), false) if err != nil { errorChan <- errors.Wrapf(err, "Unable to read the reply") return @@ -289,7 +289,7 @@ func (h *SubscriptionHandle) startSubscriber() { consumer := func(opcuaResponse []byte) { var responseMessage readWriteModel.PublishResponse var serviceFault readWriteModel.ServiceFault - unknownExtensionObject, err := readWriteModel.ExtensionObjectParseWithBuffer(ctx, utils.NewReadBufferByteBased(opcuaResponse, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian)), false) + unknownExtensionObject, err := readWriteModel.ExtensionObjectParseWithBuffer[readWriteModel.ExtensionObject](ctx, utils.NewReadBufferByteBased(opcuaResponse, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian)), false) if err != nil { h.log.Error().Err(err).Msg("Unable to parse the returned Subscription response") h.plcSubscriber.onDisconnect() @@ -399,7 +399,7 @@ func (h *SubscriptionHandle) stopSubscriber() { consumer := func(opcuaResponse []byte) { var responseMessage readWriteModel.DeleteSubscriptionsResponse - unknownExtensionObject, err := readWriteModel.ExtensionObjectParseWithBuffer(ctx, utils.NewReadBufferByteBased(opcuaResponse, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian)), false) + unknownExtensionObject, err := readWriteModel.ExtensionObjectParseWithBuffer[readWriteModel.ExtensionObject](ctx, utils.NewReadBufferByteBased(opcuaResponse, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian)), false) if err != nil { h.log.Error().Err(err).Msg("Unable to parse the returned Subscription response") h.plcSubscriber.onDisconnect() diff --git a/plc4go/internal/opcua/Writer.go b/plc4go/internal/opcua/Writer.go index 2d840445e25..600f4f1e650 100644 --- a/plc4go/internal/opcua/Writer.go +++ b/plc4go/internal/opcua/Writer.go @@ -22,9 +22,10 @@ package opcua import ( "context" "encoding/binary" + "runtime/debug" + "github.com/pkg/errors" "github.com/rs/zerolog" - "runtime/debug" apiModel "github.com/apache/plc4x/plc4go/pkg/api/model" apiValues "github.com/apache/plc4x/plc4go/pkg/api/values" @@ -120,13 +121,7 @@ func (m *Writer) WriteSync(ctx context.Context, writeRequest apiModel.PlcWriteRe nil, nil) - extObject := readWriteModel.NewExtensionObject(expandedNodeId) - - //expandedNodeId, - //nil, - //opcuaWriteRequest, - //false) - + extObject := readWriteModel.NewExtensiblePayload(readWriteModel.NewRootExtensionObject(opcuaWriteRequest, expandedNodeId, identifier), nil, 0) buffer := utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian)) if err := extObject.SerializeWithWriteBuffer(ctx, buffer); err != nil { result <- spiModel.NewDefaultPlcWriteRequestResult(writeRequest, nil, errors.Wrapf(err, "Unable to serialise the ReadRequest")) @@ -134,7 +129,7 @@ func (m *Writer) WriteSync(ctx context.Context, writeRequest apiModel.PlcWriteRe } consumer := func(opcuaResponse []byte) { - reply, err := readWriteModel.ExtensionObjectParseWithBuffer(ctx, utils.NewReadBufferByteBased(opcuaResponse, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian)), false) + reply, err := readWriteModel.ExtensionObjectParseWithBuffer[readWriteModel.ExtensionObject](ctx, utils.NewReadBufferByteBased(opcuaResponse, utils.WithByteOrderForReadBufferByteBased(binary.LittleEndian)), false) if err != nil { result <- spiModel.NewDefaultPlcWriteRequestResult(writeRequest, nil, errors.Wrapf(err, "Unable to read the reply")) return @@ -403,7 +398,7 @@ func (m *Writer) fromPlcValue(tagName string, tag Tag, request apiModel.PlcWrite case apiValues.WSTRING: tmpString := make([]readWriteModel.PascalString, length) for i := uint32(0); i < length; i++ { - tmpString[i] = readWriteModel.NewPascalString(valueObject.GetIndex(i).GetString()) + tmpString[i] = readWriteModel.NewPascalString(utils.MakePtr(valueObject.GetIndex(i).GetString())) } var arrayLength *int32 if length != 1 { diff --git a/plc4go/internal/opcua/common.go b/plc4go/internal/opcua/common.go index 1e2654ebd12..6aed1cabc25 100644 --- a/plc4go/internal/opcua/common.go +++ b/plc4go/internal/opcua/common.go @@ -31,6 +31,7 @@ import ( apiModel "github.com/apache/plc4x/plc4go/pkg/api/model" apiValues "github.com/apache/plc4x/plc4go/pkg/api/values" readWriteModel "github.com/apache/plc4x/plc4go/protocols/opcua/readwrite/model" + "github.com/apache/plc4x/plc4go/spi/utils" spiValues "github.com/apache/plc4x/plc4go/spi/values" ) @@ -59,7 +60,7 @@ func generateNodeId(tag Tag) (readWriteModel.NodeId, error) { } nodeId = readWriteModel.NewNodeId(readWriteModel.NewNodeIdGuid( /*TODO: do we want to check for overflow?*/ uint16(tag.GetNamespace()), guidBytes)) } else if tag.GetIdentifierType() == readWriteModel.OpcuaIdentifierType_STRING_IDENTIFIER { - nodeId = readWriteModel.NewNodeId(readWriteModel.NewNodeIdString( /*TODO: do we want to check for overflow?*/ uint16(tag.GetNamespace()), readWriteModel.NewPascalString(tag.GetIdentifier()))) + nodeId = readWriteModel.NewNodeId(readWriteModel.NewNodeIdString( /*TODO: do we want to check for overflow?*/ uint16(tag.GetNamespace()), readWriteModel.NewPascalString(utils.MakePtr(tag.GetIdentifier())))) } return nodeId, nil } @@ -153,7 +154,7 @@ func readResponse(localLog zerolog.Logger, readRequestIn apiModel.PlcReadRequest array := variant.GetValue() stringValues := make([]apiValues.PlcValue, len(array)) for i, t := range array { - stringValues[i] = spiValues.NewPlcSTRING(t.GetStringValue()) + stringValues[i] = spiValues.NewPlcSTRING(*t.GetStringValue()) } value = spiValues.NewPlcList(stringValues) case readWriteModel.VariantDateTime: @@ -185,7 +186,7 @@ func readResponse(localLog zerolog.Logger, readRequestIn apiModel.PlcReadRequest array := variant.GetValue() xmlElementValues := make([]apiValues.PlcValue, len(array)) for i, t := range array { - xmlElementValues[i] = spiValues.NewPlcSTRING(t.GetStringValue()) + xmlElementValues[i] = spiValues.NewPlcSTRING(*t.GetStringValue()) } value = spiValues.NewPlcList(xmlElementValues) case readWriteModel.VariantLocalizedText: @@ -194,10 +195,10 @@ func readResponse(localLog zerolog.Logger, readRequestIn apiModel.PlcReadRequest for i, t := range array { v := "" if t.GetLocaleSpecified() { - v += t.GetLocale().GetStringValue() + "|" + v += *t.GetLocale().GetStringValue() + "|" } if t.GetTextSpecified() { - v += t.GetText().GetStringValue() + v += *t.GetText().GetStringValue() } localizedTextValues[i] = spiValues.NewPlcSTRING(v) }