Skip to content

Commit

Permalink
Fix compile errors in golang opcua driver.
Browse files Browse the repository at this point in the history
Signed-off-by: Łukasz Dywicki <[email protected]>
  • Loading branch information
splatch committed Sep 25, 2024
1 parent d94ac97 commit 5e7fcaf
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 19 deletions.
3 changes: 2 additions & 1 deletion plc4go/internal/opcua/Reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
6 changes: 3 additions & 3 deletions plc4go/internal/opcua/SubscriptionHandle.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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()
Expand Down
15 changes: 5 additions & 10 deletions plc4go/internal/opcua/Writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -120,21 +121,15 @@ 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"))
return
}

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
Expand Down Expand Up @@ -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 {
Expand Down
11 changes: 6 additions & 5 deletions plc4go/internal/opcua/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand All @@ -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)
}
Expand Down

0 comments on commit 5e7fcaf

Please sign in to comment.