This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
The following commit(s) were added to refs/heads/develop by this push:
new 4245c31 plc4go: refactor spi
4245c31 is described below
commit 4245c318830c1db4da03e37d7caf3be2d84e559a
Author: Sebastian Rühl <[email protected]>
AuthorDate: Fri Apr 16 18:47:11 2021 +0200
plc4go: refactor spi
+ Make Builders chainable
+ deduplicate code in spi.models
+ moved RequestInterceptor.go to interceptors and resolved cyclic import
dependency
+ refactored examples to use chained builder
---
.../discovery/hello_world_plc4go_knx_discovery.go | 24 ++---
.../hello_world_plc4go_knx_read_group_address.go | 8 +-
.../hello_world_plc4go_knx_subscription.go | 110 ++++++++++-----------
plc4go/examples/read/hello_world_plc4go_read.go | 6 +-
plc4go/examples/write/hello_world_plc4go_write.go | 6 +-
plc4go/internal/plc4go/ads/Connection.go | 13 ++-
plc4go/internal/plc4go/knxnetip/Connection.go | 14 +--
plc4go/internal/plc4go/modbus/Connection.go | 13 ++-
.../{model => interceptors}/RequestInterceptor.go | 2 +-
.../interceptors/SingleItemRequestInterceptor.go | 54 ++++++----
.../plc4go/spi/model/DefaultBrowseRequest.go | 3 +-
.../plc4go/spi/model/DefaultPlcReadRequest.go | 51 +++++-----
.../plc4go/spi/model/DefaultPlcReadResponse.go | 18 ++--
.../spi/model/DefaultPlcSubscriptionEvent.go | 24 ++---
.../spi/model/DefaultPlcSubscriptionRequest.go | 47 ++++-----
.../spi/model/DefaultPlcSubscriptionResponse.go | 12 +--
.../plc4go/spi/model/DefaultPlcWriteRequest.go | 32 +++---
.../plc4go/spi/model/DefaultPlcWriteResponse.go | 12 +--
.../plc4go/spi/model/DefaultRequest.go} | 33 +++----
.../plc4go/spi/model/DefaultResponse.go} | 29 ++----
plc4go/pkg/plc4go/model/plc_browse.go | 2 +-
plc4go/pkg/plc4go/model/plc_read.go | 4 +-
plc4go/pkg/plc4go/model/plc_subscription.go | 14 +--
plc4go/pkg/plc4go/model/plc_write.go | 4 +-
24 files changed, 249 insertions(+), 286 deletions(-)
diff --git a/plc4go/examples/knx/discovery/hello_world_plc4go_knx_discovery.go
b/plc4go/examples/knx/discovery/hello_world_plc4go_knx_discovery.go
index e190eed..ff18277 100644
--- a/plc4go/examples/knx/discovery/hello_world_plc4go_knx_discovery.go
+++ b/plc4go/examples/knx/discovery/hello_world_plc4go_knx_discovery.go
@@ -51,11 +51,11 @@ func main() {
defer connection.BlockingClose()
// Try to find all KNX devices on the current network
- browseRequestBuilder := connection.BrowseRequestBuilder()
- //browseRequestBuilder.AddItem("allDevices",
"[1-15].[1-15].[0-255]")
- browseRequestBuilder.AddItem("allMyDevices",
"[1-3].[1-6].[0-60]")
- //browseRequestBuilder.AddItem("onlyOneDevice", "1.1.20")
- browseRequest, err := browseRequestBuilder.Build()
+ browseRequest, err := connection.BrowseRequestBuilder().
+ //AddItem("allDevices", "[1-15].[1-15].[0-255]").
+ AddItem("allMyDevices", "[1-3].[1-6].[0-60]").
+ //AddItem("onlyOneDevice", "1.1.20")
+ Build()
if err != nil {
log.Error().Err(err).Msg("error creating browse
request")
return
@@ -66,9 +66,9 @@ func main() {
log.Info().Msgf("Inspecting detected Device at KNX
Address: %s", knxAddress)
// Try to get all the com-objects and the group
addresses they are attached to.
- browseRequestBuilder = connection.BrowseRequestBuilder()
- browseRequestBuilder.AddItem("comObjects",
knxAddress+"#com-obj")
- browseRequest, err := browseRequestBuilder.Build()
+ browseRequest, err := connection.BrowseRequestBuilder().
+ AddItem("comObjects", knxAddress+"#com-obj").
+ Build()
if err != nil {
log.Error().Err(err).Msg("error creating read
request")
return false
@@ -99,10 +99,10 @@ func main() {
log.Info().Msgf(" - %15s (%s) %s",
result.Field.GetAddressString(), permissions, result.Name)
}
- readRequestBuilder := connection.ReadRequestBuilder()
-
readRequestBuilder.AddQuery("applicationProgramVersion", knxAddress+"#3/13")
- readRequestBuilder.AddQuery("interfaceProgramVersion",
knxAddress+"#4/13")
- readRequest, err := readRequestBuilder.Build()
+ readRequest, err := connection.ReadRequestBuilder().
+ AddQuery("applicationProgramVersion",
knxAddress+"#3/13").
+ AddQuery("interfaceProgramVersion",
knxAddress+"#4/13").
+ Build()
if err != nil {
log.Error().Msgf("Error creating read request
for scanning %s", knxAddress)
return false
diff --git
a/plc4go/examples/knx/groupAddressRead/hello_world_plc4go_knx_read_group_address.go
b/plc4go/examples/knx/groupAddressRead/hello_world_plc4go_knx_read_group_address.go
index 7ba5d76..b2be91b 100644
---
a/plc4go/examples/knx/groupAddressRead/hello_world_plc4go_knx_read_group_address.go
+++
b/plc4go/examples/knx/groupAddressRead/hello_world_plc4go_knx_read_group_address.go
@@ -49,10 +49,10 @@ func main() {
defer connection.BlockingClose()
// Prepare a read-request
- rrb := connection.ReadRequestBuilder()
- rrb.AddQuery("firstFlorTemperatures", "2/[1,2,4,6]/10:DPT_Value_Temp")
- rrb.AddQuery("secondFlorTemperatures", "3/[2,3,4,6]/10:DPT_Value_Temp")
- readRequest, err := rrb.Build()
+ readRequest, err := connection.ReadRequestBuilder().
+ AddQuery("firstFlorTemperatures",
"2/[1,2,4,6]/10:DPT_Value_Temp").
+ AddQuery("secondFlorTemperatures",
"3/[2,3,4,6]/10:DPT_Value_Temp").
+ Build()
if err != nil {
fmt.Printf("error preparing read-request: %s",
connectionResult.Err.Error())
return
diff --git
a/plc4go/examples/knx/subscribe/hello_world_plc4go_knx_subscription.go
b/plc4go/examples/knx/subscribe/hello_world_plc4go_knx_subscription.go
index 0d7a795..f51e5c1 100644
--- a/plc4go/examples/knx/subscribe/hello_world_plc4go_knx_subscription.go
+++ b/plc4go/examples/knx/subscribe/hello_world_plc4go_knx_subscription.go
@@ -52,68 +52,66 @@ func main() {
defer connection.BlockingClose()
// Prepare a subscription-request
- srb := connection.SubscriptionRequestBuilder()
- // Intentionally catching all without datatype and the temperature
values of the first floor with type
- srb.AddChangeOfStateQuery("all", "*/*/*")
- srb.AddChangeOfStateQuery("firstFlorTemperatures",
"2/[1,2,4,6]/10:DPT_Value_Temp")
- srb.AddItemHandler(func(event model.PlcSubscriptionEvent) {
- // Iterate over all fields that were triggered in the current
event.
- for _, fieldName := range event.GetFieldNames() {
- if event.GetResponseCode(fieldName) ==
model.PlcResponseCode_OK {
- address := event.GetAddress(fieldName)
- value := event.GetValue(fieldName)
- // If the plc-value was a raw-plcValue, we will
try lazily decode the value
- // In my installation all group addresses
ending with "/10" are temperature values
- // and ending on "/0" are light switch actions.
- // So if I find a group address ending on that,
decode it with a given type name,
- // If not, simply output it as array of USINT
values.
- switch value.(type) {
- case values.RawPlcValue:
- rawValue := value.(values.RawPlcValue)
- datatypeName := "USINT"
- if strings.HasSuffix(address, "/10") {
- datatypeName = "DPT_Value_Temp"
- } else if strings.HasSuffix(address,
"/0") {
- datatypeName = "BOOL"
+ if subscriptionRequest, err := connection.SubscriptionRequestBuilder().
+ // Intentionally catching all without datatype and the
temperature values of the first floor with type
+ AddChangeOfStateQuery("all", "*/*/*").
+ AddChangeOfStateQuery("firstFlorTemperatures",
"2/[1,2,4,6]/10:DPT_Value_Temp").
+ AddItemHandler(func(event model.PlcSubscriptionEvent) {
+ // Iterate over all fields that were triggered in the
current event.
+ for _, fieldName := range event.GetFieldNames() {
+ if event.GetResponseCode(fieldName) ==
model.PlcResponseCode_OK {
+ address := event.GetAddress(fieldName)
+ value := event.GetValue(fieldName)
+ // If the plc-value was a raw-plcValue,
we will try lazily decode the value
+ // In my installation all group
addresses ending with "/10" are temperature values
+ // and ending on "/0" are light switch
actions.
+ // So if I find a group address ending
on that, decode it with a given type name,
+ // If not, simply output it as array of
USINT values.
+ switch value.(type) {
+ case values.RawPlcValue:
+ rawValue :=
value.(values.RawPlcValue)
+ datatypeName := "USINT"
+ if strings.HasSuffix(address,
"/10") {
+ datatypeName =
"DPT_Value_Temp"
+ } else if
strings.HasSuffix(address, "/0") {
+ datatypeName = "BOOL"
+ }
+ fmt.Printf("Got raw-value event
for address %s: ", address)
+ if !rawValue.RawHasMore() {
+ fmt.Printf("nothing")
+ }
+ for rawValue.RawHasMore() {
+ value =
rawValue.RawDecodeValue(datatypeName)
+ fmt.Printf(" '%s'",
value.GetString())
+ }
+ fmt.Printf("\n")
+ default:
+ fmt.Printf("Got event for
address %s: %s\n", address, value.GetString())
}
- fmt.Printf("Got raw-value event for
address %s: ", address)
- if !rawValue.RawHasMore() {
- fmt.Printf("nothing")
- }
- for rawValue.RawHasMore() {
- value =
rawValue.RawDecodeValue(datatypeName)
- fmt.Printf(" '%s'",
value.GetString())
- }
- fmt.Printf("\n")
- default:
- fmt.Printf("Got event for address %s:
%s\n", address, value.GetString())
}
}
+ }).Build(); err == nil {
+ // Execute a subscription-request
+ rrc := subscriptionRequest.Execute()
+
+ // Wait for the response to finish
+ rrr := <-rrc
+ if rrr.Err != nil {
+ fmt.Printf("error executing subscription-request: %s",
rrr.Err.Error())
+ return
}
- })
- subscriptionRequest, err := srb.Build()
- if err != nil {
- fmt.Printf("error preparing subscription-request: %s",
connectionResult.Err.Error())
- return
- }
- // Execute a subscription-request
- rrc := subscriptionRequest.Execute()
+ // Do something with the response
+ for _, fieldName := range rrr.Response.GetFieldNames() {
+ if rrr.Response.GetResponseCode(fieldName) !=
model.PlcResponseCode_OK {
+ fmt.Printf("error an non-ok return code for
field %s: %s\n", fieldName, rrr.Response.GetResponseCode(fieldName).GetName())
+ continue
+ }
+ }
- // Wait for the response to finish
- rrr := <-rrc
- if rrr.Err != nil {
- fmt.Printf("error executing subscription-request: %s",
rrr.Err.Error())
+ time.Sleep(time.Minute * 5)
+ } else {
+ fmt.Printf("error preparing subscription-request: %s",
connectionResult.Err.Error())
return
}
-
- // Do something with the response
- for _, fieldName := range rrr.Response.GetFieldNames() {
- if rrr.Response.GetResponseCode(fieldName) !=
model.PlcResponseCode_OK {
- fmt.Printf("error an non-ok return code for field %s:
%s\n", fieldName, rrr.Response.GetResponseCode(fieldName).GetName())
- continue
- }
- }
-
- time.Sleep(time.Minute * 5)
}
diff --git a/plc4go/examples/read/hello_world_plc4go_read.go
b/plc4go/examples/read/hello_world_plc4go_read.go
index 05d391d..11cd142 100644
--- a/plc4go/examples/read/hello_world_plc4go_read.go
+++ b/plc4go/examples/read/hello_world_plc4go_read.go
@@ -45,9 +45,9 @@ func main() {
defer connection.BlockingClose()
// Prepare a read-request
- rrb := connection.ReadRequestBuilder()
- rrb.AddQuery("field", "holding-register:26:REAL")
- readRequest, err := rrb.Build()
+ readRequest, err := connection.ReadRequestBuilder().
+ AddQuery("field", "holding-register:26:REAL").
+ Build()
if err != nil {
fmt.Printf("error preparing read-request: %s",
connectionResult.Err.Error())
return
diff --git a/plc4go/examples/write/hello_world_plc4go_write.go
b/plc4go/examples/write/hello_world_plc4go_write.go
index f549a80..22d7a0a 100644
--- a/plc4go/examples/write/hello_world_plc4go_write.go
+++ b/plc4go/examples/write/hello_world_plc4go_write.go
@@ -45,9 +45,9 @@ func main() {
defer connection.BlockingClose()
// Prepare a write-request
- wrb := connection.WriteRequestBuilder()
- wrb.AddQuery("field", "holding-register:26:REAL", 2.7182818284)
- writeRequest, err := wrb.Build()
+ writeRequest, err := connection.WriteRequestBuilder().
+ AddQuery("field", "holding-register:26:REAL", 2.7182818284).
+ Build()
if err != nil {
fmt.Printf("error preparing read-request: %s",
connectionResult.Err.Error())
return
diff --git a/plc4go/internal/plc4go/ads/Connection.go
b/plc4go/internal/plc4go/ads/Connection.go
index 5f97150..c0ddb05 100644
--- a/plc4go/internal/plc4go/ads/Connection.go
+++ b/plc4go/internal/plc4go/ads/Connection.go
@@ -33,7 +33,7 @@ import (
type Connection struct {
_default.DefaultConnection
messageCodec spi.MessageCodec
- requestInterceptor internalModel.RequestInterceptor
+ requestInterceptor interceptors.RequestInterceptor
configuration Configuration
reader *Reader
writer *Writer
@@ -56,10 +56,13 @@ func NewConnection(messageCodec spi.MessageCodec,
configuration Configuration, f
&reader,
)
connection := &Connection{
- messageCodec: messageCodec,
- requestInterceptor:
interceptors.NewSingleItemRequestInterceptor(),
- reader: &reader,
- writer: &writer,
+ messageCodec: messageCodec,
+ requestInterceptor:
interceptors.NewSingleItemRequestInterceptor(
+ internalModel.NewDefaultPlcReadRequest,
+ internalModel.NewDefaultPlcReadResponse,
+ ),
+ reader: &reader,
+ writer: &writer,
}
connection.DefaultConnection = _default.NewDefaultConnection(connection,
_default.WithPlcFieldHandler(fieldHandler),
diff --git a/plc4go/internal/plc4go/knxnetip/Connection.go
b/plc4go/internal/plc4go/knxnetip/Connection.go
index 052a852..14319890 100644
--- a/plc4go/internal/plc4go/knxnetip/Connection.go
+++ b/plc4go/internal/plc4go/knxnetip/Connection.go
@@ -123,8 +123,7 @@ type Connection struct {
TunnelingRequestExpectationId int32
DeviceConnections
map[driverModel.KnxAddress]*KnxDeviceConnection
- requestInterceptor internalModel.RequestInterceptor
- plc4go.PlcConnection
+ requestInterceptor interceptors.RequestInterceptor
sync.Mutex
// indicates if the tunneling requests loop is running
@@ -162,10 +161,13 @@ type InternalResult struct {
func NewConnection(transportInstance transports.TransportInstance, options
map[string][]string, fieldHandler spi.PlcFieldHandler) *Connection {
connection := &Connection{
- options: options,
- fieldHandler: fieldHandler,
- valueHandler: NewValueHandler(),
- requestInterceptor:
interceptors.NewSingleItemRequestInterceptor(),
+ options: options,
+ fieldHandler: fieldHandler,
+ valueHandler: NewValueHandler(),
+ requestInterceptor:
interceptors.NewSingleItemRequestInterceptor(
+ internalModel.NewDefaultPlcReadRequest,
+ internalModel.NewDefaultPlcReadResponse,
+ ),
subscribers: []*Subscriber{},
valueCache: map[uint16][]int8{},
valueCacheMutex: sync.RWMutex{},
diff --git a/plc4go/internal/plc4go/modbus/Connection.go
b/plc4go/internal/plc4go/modbus/Connection.go
index a52aab8..90aabec 100644
--- a/plc4go/internal/plc4go/modbus/Connection.go
+++ b/plc4go/internal/plc4go/modbus/Connection.go
@@ -38,15 +38,18 @@ type Connection struct {
unitIdentifier uint8
messageCodec spi.MessageCodec
options map[string][]string
- requestInterceptor internalModel.RequestInterceptor
+ requestInterceptor interceptors.RequestInterceptor
}
func NewConnection(unitIdentifier uint8, messageCodec spi.MessageCodec,
options map[string][]string, fieldHandler spi.PlcFieldHandler) *Connection {
connection := &Connection{
- unitIdentifier: unitIdentifier,
- messageCodec: messageCodec,
- options: options,
- requestInterceptor:
interceptors.NewSingleItemRequestInterceptor(),
+ unitIdentifier: unitIdentifier,
+ messageCodec: messageCodec,
+ options: options,
+ requestInterceptor:
interceptors.NewSingleItemRequestInterceptor(
+ internalModel.NewDefaultPlcReadRequest,
+ internalModel.NewDefaultPlcReadResponse,
+ ),
}
connection.DefaultConnection = _default.NewDefaultConnection(connection,
_default.WithDefaultTtl(time.Second*5),
diff --git a/plc4go/internal/plc4go/spi/model/RequestInterceptor.go
b/plc4go/internal/plc4go/spi/interceptors/RequestInterceptor.go
similarity index 98%
rename from plc4go/internal/plc4go/spi/model/RequestInterceptor.go
rename to plc4go/internal/plc4go/spi/interceptors/RequestInterceptor.go
index f865d4b..5fa730d 100644
--- a/plc4go/internal/plc4go/spi/model/RequestInterceptor.go
+++ b/plc4go/internal/plc4go/spi/interceptors/RequestInterceptor.go
@@ -17,7 +17,7 @@
// under the License.
//
-package model
+package interceptors
import (
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
diff --git
a/plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
b/plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
index 40eed70..442b88d 100644
--- a/plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
+++ b/plc4go/internal/plc4go/spi/interceptors/SingleItemRequestInterceptor.go
@@ -21,50 +21,64 @@ package interceptors
import (
"errors"
- "github.com/apache/plc4x/plc4go/internal/plc4go/spi/model"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi/utils"
- apiModel "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
+ "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/apache/plc4x/plc4go/pkg/plc4go/values"
"github.com/rs/zerolog/log"
)
+type ReaderExposer interface {
+ GetReader() spi.PlcReader
+}
+
+type ReadRequestInterceptorExposer interface {
+ GetReadRequestInterceptor() ReadRequestInterceptor
+}
+
+type requestFactory func(fields map[string]model.PlcField, fieldNames
[]string, reader spi.PlcReader, readRequestInterceptor ReadRequestInterceptor)
model.PlcReadRequest
+
+type responseFactory func(request model.PlcReadRequest, responseCodes
map[string]model.PlcResponseCode, values map[string]values.PlcValue)
model.PlcReadResponse
+
type SingleItemRequestInterceptor struct {
+ requestFactory requestFactory
+ responseFactory responseFactory
}
-func NewSingleItemRequestInterceptor() SingleItemRequestInterceptor {
- return SingleItemRequestInterceptor{}
+func NewSingleItemRequestInterceptor(requestFactory requestFactory,
responseFactory responseFactory) SingleItemRequestInterceptor {
+ return SingleItemRequestInterceptor{requestFactory, responseFactory}
}
-func (m SingleItemRequestInterceptor) InterceptReadRequest(readRequest
apiModel.PlcReadRequest) []apiModel.PlcReadRequest {
+func (m SingleItemRequestInterceptor) InterceptReadRequest(readRequest
model.PlcReadRequest) []model.PlcReadRequest {
// If this request just has one field, go the shortcut
if len(readRequest.GetFieldNames()) == 1 {
log.Debug().Msg("We got only one request, no splitting
required")
- return []apiModel.PlcReadRequest{readRequest}
+ return []model.PlcReadRequest{readRequest}
}
log.Trace().Msg("Splitting requests")
// In all other cases, create a new read request containing only one
item
- defaultReadRequest := readRequest.(model.DefaultPlcReadRequest)
- var readRequests []apiModel.PlcReadRequest
+ var readRequests []model.PlcReadRequest
for _, fieldName := range readRequest.GetFieldNames() {
log.Debug().Str("fieldName", fieldName).Msg("Splitting into own
request")
field := readRequest.GetField(fieldName)
- subReadRequest := model.NewDefaultPlcReadRequest(
- map[string]apiModel.PlcField{fieldName: field},
+ subReadRequest := m.requestFactory(
+ map[string]model.PlcField{fieldName: field},
[]string{fieldName},
- defaultReadRequest.Reader,
- defaultReadRequest.ReadRequestInterceptor)
+ readRequest.(ReaderExposer).GetReader(),
+
readRequest.(ReadRequestInterceptorExposer).GetReadRequestInterceptor(),
+ )
readRequests = append(readRequests, subReadRequest)
}
return readRequests
}
-func (m SingleItemRequestInterceptor) ProcessReadResponses(readRequest
apiModel.PlcReadRequest, readResults []apiModel.PlcReadRequestResult)
apiModel.PlcReadRequestResult {
+func (m SingleItemRequestInterceptor) ProcessReadResponses(readRequest
model.PlcReadRequest, readResults []model.PlcReadRequestResult)
model.PlcReadRequestResult {
if len(readResults) == 1 {
log.Debug().Msg("We got only one response, no merging required")
return readResults[0]
}
log.Trace().Msg("Merging requests")
- responseCodes := map[string]apiModel.PlcResponseCode{}
+ responseCodes := map[string]model.PlcResponseCode{}
val := map[string]values.PlcValue{}
var err error = nil
for _, readResult := range readResults {
@@ -87,18 +101,18 @@ func (m SingleItemRequestInterceptor)
ProcessReadResponses(readRequest apiModel.
}
}
}
- return apiModel.PlcReadRequestResult{
+ return model.PlcReadRequestResult{
Request: readRequest,
- Response: model.NewDefaultPlcReadResponse(readRequest,
responseCodes, val),
+ Response: m.responseFactory(readRequest, responseCodes, val),
Err: err,
}
}
-func (m SingleItemRequestInterceptor) InterceptWriteRequest(writeRequest
apiModel.PlcWriteRequest) []apiModel.PlcWriteRequest {
- return []apiModel.PlcWriteRequest{writeRequest}
+func (m SingleItemRequestInterceptor) InterceptWriteRequest(writeRequest
model.PlcWriteRequest) []model.PlcWriteRequest {
+ return []model.PlcWriteRequest{writeRequest}
}
-func (m SingleItemRequestInterceptor) ProcessWriteResponses(writeRequest
apiModel.PlcWriteRequest, writeResponses []apiModel.PlcWriteRequestResult)
apiModel.PlcWriteRequestResult {
+func (m SingleItemRequestInterceptor) ProcessWriteResponses(writeRequest
model.PlcWriteRequest, writeResponses []model.PlcWriteRequestResult)
model.PlcWriteRequestResult {
// TODO: unfinished implementation
- return apiModel.PlcWriteRequestResult{}
+ return model.PlcWriteRequestResult{}
}
diff --git a/plc4go/internal/plc4go/spi/model/DefaultBrowseRequest.go
b/plc4go/internal/plc4go/spi/model/DefaultBrowseRequest.go
index 97468cb..9d03553 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultBrowseRequest.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultBrowseRequest.go
@@ -36,8 +36,9 @@ func NewDefaultPlcBrowseRequestBuilder(browser
spi.PlcBrowser) *DefaultPlcBrowse
}
}
-func (m *DefaultPlcBrowseRequestBuilder) AddItem(name string, query string) {
+func (m *DefaultPlcBrowseRequestBuilder) AddItem(name string, query string)
model.PlcBrowseRequestBuilder {
m.queries[name] = query
+ return m
}
func (m *DefaultPlcBrowseRequestBuilder) Build() (model.PlcBrowseRequest,
error) {
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcReadRequest.go
b/plc4go/internal/plc4go/spi/model/DefaultPlcReadRequest.go
index 5690bdd..b4cf699 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcReadRequest.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcReadRequest.go
@@ -22,6 +22,7 @@ package model
import (
"encoding/xml"
"github.com/apache/plc4x/plc4go/internal/plc4go/spi"
+ "github.com/apache/plc4x/plc4go/internal/plc4go/spi/interceptors"
"github.com/apache/plc4x/plc4go/pkg/plc4go/model"
"github.com/pkg/errors"
"time"
@@ -34,14 +35,14 @@ type DefaultPlcReadRequestBuilder struct {
queryNames []string
fields map[string]model.PlcField
fieldNames []string
- readRequestInterceptor ReadRequestInterceptor
+ readRequestInterceptor interceptors.ReadRequestInterceptor
}
func NewDefaultPlcReadRequestBuilder(fieldHandler spi.PlcFieldHandler, reader
spi.PlcReader) *DefaultPlcReadRequestBuilder {
return NewDefaultPlcReadRequestBuilderWithInterceptor(fieldHandler,
reader, nil)
}
-func NewDefaultPlcReadRequestBuilderWithInterceptor(fieldHandler
spi.PlcFieldHandler, reader spi.PlcReader, readRequestInterceptor
ReadRequestInterceptor) *DefaultPlcReadRequestBuilder {
+func NewDefaultPlcReadRequestBuilderWithInterceptor(fieldHandler
spi.PlcFieldHandler, reader spi.PlcReader, readRequestInterceptor
interceptors.ReadRequestInterceptor) *DefaultPlcReadRequestBuilder {
return &DefaultPlcReadRequestBuilder{
reader: reader,
fieldHandler: fieldHandler,
@@ -53,14 +54,16 @@ func
NewDefaultPlcReadRequestBuilderWithInterceptor(fieldHandler spi.PlcFieldHan
}
}
-func (m *DefaultPlcReadRequestBuilder) AddQuery(name string, query string) {
+func (m *DefaultPlcReadRequestBuilder) AddQuery(name string, query string)
model.PlcReadRequestBuilder {
m.queryNames = append(m.queryNames, name)
m.queries[name] = query
+ return m
}
-func (m *DefaultPlcReadRequestBuilder) AddField(name string, field
model.PlcField) {
+func (m *DefaultPlcReadRequestBuilder) AddField(name string, field
model.PlcField) model.PlcReadRequestBuilder {
m.fieldNames = append(m.fieldNames, name)
m.fields[name] = field
+ return m
}
func (m *DefaultPlcReadRequestBuilder) Build() (model.PlcReadRequest, error) {
@@ -72,30 +75,31 @@ func (m *DefaultPlcReadRequestBuilder) Build()
(model.PlcReadRequest, error) {
}
m.AddField(name, field)
}
- return DefaultPlcReadRequest{
- Fields: m.fields,
- FieldNames: m.fieldNames,
- Reader: m.reader,
- ReadRequestInterceptor: m.readRequestInterceptor,
- }, nil
+ return NewDefaultPlcReadRequest(m.fields, m.fieldNames, m.reader,
m.readRequestInterceptor), nil
}
type DefaultPlcReadRequest struct {
- Fields map[string]model.PlcField
- FieldNames []string
+ DefaultRequest
Reader spi.PlcReader
- ReadRequestInterceptor ReadRequestInterceptor
+ ReadRequestInterceptor interceptors.ReadRequestInterceptor
}
-func NewDefaultPlcReadRequest(fields map[string]model.PlcField, fieldNames
[]string, reader spi.PlcReader, readRequestInterceptor ReadRequestInterceptor)
DefaultPlcReadRequest {
+func NewDefaultPlcReadRequest(fields map[string]model.PlcField, fieldNames
[]string, reader spi.PlcReader, readRequestInterceptor
interceptors.ReadRequestInterceptor) model.PlcReadRequest {
return DefaultPlcReadRequest{
- Fields: fields,
- FieldNames: fieldNames,
+ DefaultRequest: NewDefaultRequest(fields, fieldNames),
Reader: reader,
ReadRequestInterceptor: readRequestInterceptor,
}
}
+func (m DefaultPlcReadRequest) GetReader() spi.PlcReader {
+ return m.Reader
+}
+
+func (m DefaultPlcReadRequest) GetReadRequestInterceptor()
interceptors.ReadRequestInterceptor {
+ return m.ReadRequestInterceptor
+}
+
func (m DefaultPlcReadRequest) Execute() <-chan model.PlcReadRequestResult {
// Shortcut, if no interceptor is defined
if m.ReadRequestInterceptor == nil {
@@ -136,17 +140,6 @@ func (m DefaultPlcReadRequest) Execute() <-chan
model.PlcReadRequestResult {
return resultChannel
}
-func (m DefaultPlcReadRequest) GetFieldNames() []string {
- return m.FieldNames
-}
-
-func (m DefaultPlcReadRequest) GetField(name string) model.PlcField {
- if field, ok := m.Fields[name]; ok {
- return field
- }
- return nil
-}
-
func (m DefaultPlcReadRequest) MarshalXML(e *xml.Encoder, start
xml.StartElement) error {
if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local:
"PlcReadRequest"}}); err != nil {
return err
@@ -155,8 +148,8 @@ func (m DefaultPlcReadRequest) MarshalXML(e *xml.Encoder,
start xml.StartElement
if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local:
"fields"}}); err != nil {
return err
}
- for _, fieldName := range m.FieldNames {
- field := m.Fields[fieldName]
+ for _, fieldName := range m.fieldNames {
+ field := m.fields[fieldName]
if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local:
fieldName}}); err != nil {
return err
}
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcReadResponse.go
b/plc4go/internal/plc4go/spi/model/DefaultPlcReadResponse.go
index bd382ce..f911b3e 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcReadResponse.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcReadResponse.go
@@ -26,16 +26,16 @@ import (
)
type DefaultPlcReadResponse struct {
- request model.PlcReadRequest
- responseCodes map[string]model.PlcResponseCode
- values map[string]values.PlcValue
+ DefaultResponse
+ request model.PlcReadRequest
+ values map[string]values.PlcValue
}
-func NewDefaultPlcReadResponse(request model.PlcReadRequest, responseCodes
map[string]model.PlcResponseCode, values map[string]values.PlcValue)
DefaultPlcReadResponse {
+func NewDefaultPlcReadResponse(request model.PlcReadRequest, responseCodes
map[string]model.PlcResponseCode, values map[string]values.PlcValue)
model.PlcReadResponse {
return DefaultPlcReadResponse{
- request: request,
- responseCodes: responseCodes,
- values: values,
+ DefaultResponse: NewDefaultResponse(responseCodes),
+ request: request,
+ values: values,
}
}
@@ -54,10 +54,6 @@ func (m DefaultPlcReadResponse) GetRequest()
model.PlcReadRequest {
return m.request
}
-func (m DefaultPlcReadResponse) GetResponseCode(name string)
model.PlcResponseCode {
- return m.responseCodes[name]
-}
-
func (m DefaultPlcReadResponse) GetValue(name string) values.PlcValue {
return m.values[name]
}
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
index cf87790..4ef16b4 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionEvent.go
@@ -27,22 +27,22 @@ import (
)
type DefaultPlcSubscriptionEvent struct {
- fields map[string]model.PlcField
- types map[string]SubscriptionType
- intervals map[string]time.Duration
- responseCodes map[string]model.PlcResponseCode
- values map[string]values.PlcValue
+ DefaultResponse
+ fields map[string]model.PlcField
+ types map[string]SubscriptionType
+ intervals map[string]time.Duration
+ values map[string]values.PlcValue
}
func NewDefaultPlcSubscriptionEvent(fields map[string]model.PlcField, types
map[string]SubscriptionType,
intervals map[string]time.Duration, responseCodes
map[string]model.PlcResponseCode,
values map[string]values.PlcValue) DefaultPlcSubscriptionEvent {
return DefaultPlcSubscriptionEvent{
- fields: fields,
- types: types,
- intervals: intervals,
- responseCodes: responseCodes,
- values: values,
+ DefaultResponse: NewDefaultResponse(responseCodes),
+ fields: fields,
+ types: types,
+ intervals: intervals,
+ values: values,
}
}
@@ -66,10 +66,6 @@ func (m DefaultPlcSubscriptionEvent) GetInterval(name
string) time.Duration {
return m.intervals[name]
}
-func (m DefaultPlcSubscriptionEvent) GetResponseCode(name string)
model.PlcResponseCode {
- return m.responseCodes[name]
-}
-
func (m DefaultPlcSubscriptionEvent) GetAddress(name string) string {
panic("GetAddress not implemented")
}
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
index b6fb8d3..f5b0552 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
@@ -61,46 +61,53 @@ func NewDefaultPlcSubscriptionRequestBuilder(fieldHandler
spi.PlcFieldHandler, v
}
}
-func (m *DefaultPlcSubscriptionRequestBuilder) AddCyclicQuery(name string,
query string, interval time.Duration) {
+func (m *DefaultPlcSubscriptionRequestBuilder) AddCyclicQuery(name string,
query string, interval time.Duration) model.PlcSubscriptionRequestBuilder {
m.queryNames = append(m.queryNames, name)
m.queries[name] = query
m.types[name] = SubscriptionCyclic
m.intervals[name] = interval
+ return m
}
-func (m *DefaultPlcSubscriptionRequestBuilder) AddCyclicField(name string,
field model.PlcField, interval time.Duration) {
+func (m *DefaultPlcSubscriptionRequestBuilder) AddCyclicField(name string,
field model.PlcField, interval time.Duration)
model.PlcSubscriptionRequestBuilder {
m.fieldNames = append(m.fieldNames, name)
m.fields[name] = field
m.types[name] = SubscriptionCyclic
m.intervals[name] = interval
+ return m
}
-func (m *DefaultPlcSubscriptionRequestBuilder) AddChangeOfStateQuery(name
string, query string) {
+func (m *DefaultPlcSubscriptionRequestBuilder) AddChangeOfStateQuery(name
string, query string) model.PlcSubscriptionRequestBuilder {
m.queryNames = append(m.queryNames, name)
m.queries[name] = query
m.types[name] = SubscriptionChangeOfState
+ return m
}
-func (m *DefaultPlcSubscriptionRequestBuilder) AddChangeOfStateField(name
string, field model.PlcField) {
+func (m *DefaultPlcSubscriptionRequestBuilder) AddChangeOfStateField(name
string, field model.PlcField) model.PlcSubscriptionRequestBuilder {
m.fieldNames = append(m.fieldNames, name)
m.fields[name] = field
m.types[name] = SubscriptionChangeOfState
+ return m
}
-func (m *DefaultPlcSubscriptionRequestBuilder) AddEventQuery(name string,
query string) {
+func (m *DefaultPlcSubscriptionRequestBuilder) AddEventQuery(name string,
query string) model.PlcSubscriptionRequestBuilder {
m.queryNames = append(m.queryNames, name)
m.queries[name] = query
m.types[name] = SubscriptionEvent
+ return m
}
-func (m *DefaultPlcSubscriptionRequestBuilder) AddEventField(name string,
field model.PlcField) {
+func (m *DefaultPlcSubscriptionRequestBuilder) AddEventField(name string,
field model.PlcField) model.PlcSubscriptionRequestBuilder {
m.fieldNames = append(m.fieldNames, name)
m.fields[name] = field
m.types[name] = SubscriptionEvent
+ return m
}
-func (m *DefaultPlcSubscriptionRequestBuilder) AddItemHandler(eventHandler
model.PlcSubscriptionEventHandler) {
+func (m *DefaultPlcSubscriptionRequestBuilder) AddItemHandler(eventHandler
model.PlcSubscriptionEventHandler) model.PlcSubscriptionRequestBuilder {
m.eventHandler = eventHandler
+ return m
}
func (m *DefaultPlcSubscriptionRequestBuilder) Build()
(model.PlcSubscriptionRequest, error) {
@@ -113,35 +120,23 @@ func (m *DefaultPlcSubscriptionRequestBuilder) Build()
(model.PlcSubscriptionReq
m.fieldNames = append(m.fieldNames, name)
m.fields[name] = field
}
- return DefaultPlcSubscriptionRequest{
- fields: m.fields,
- fieldNames: m.fieldNames,
- types: m.types,
- intervals: m.intervals,
- subscriber: m.subscriber,
- eventHandler: m.eventHandler,
- }, nil
+ return NewDefaultPlcSubscriptionRequest(m.fields, m.fieldNames,
m.types, m.intervals, m.subscriber, m.eventHandler), nil
}
type DefaultPlcSubscriptionRequest struct {
- fields map[string]model.PlcField
- fieldNames []string
+ DefaultRequest
types map[string]SubscriptionType
intervals map[string]time.Duration
- eventHandler model.PlcSubscriptionEventHandler
subscriber spi.PlcSubscriber
+ eventHandler model.PlcSubscriptionEventHandler
}
-func (m DefaultPlcSubscriptionRequest) Execute() <-chan
model.PlcSubscriptionRequestResult {
- return m.subscriber.Subscribe(m)
-}
-
-func (m DefaultPlcSubscriptionRequest) GetFieldNames() []string {
- return m.fieldNames
+func NewDefaultPlcSubscriptionRequest(fields map[string]model.PlcField,
fieldNames []string, types map[string]SubscriptionType, intervals
map[string]time.Duration, subscriber spi.PlcSubscriber, eventHandler
model.PlcSubscriptionEventHandler) model.PlcSubscriptionRequest {
+ return DefaultPlcSubscriptionRequest{NewDefaultRequest(fields,
fieldNames), types, intervals, subscriber, eventHandler}
}
-func (m DefaultPlcSubscriptionRequest) GetField(name string) model.PlcField {
- return m.fields[name]
+func (m DefaultPlcSubscriptionRequest) Execute() <-chan
model.PlcSubscriptionRequestResult {
+ return m.subscriber.Subscribe(m)
}
func (m DefaultPlcSubscriptionRequest) GetEventHandler()
model.PlcSubscriptionEventHandler {
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
index 4892f3b..19a1256 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
@@ -25,14 +25,14 @@ import (
)
type DefaultPlcSubscriptionResponse struct {
- request model.PlcSubscriptionRequest
- responseCodes map[string]model.PlcResponseCode
+ DefaultResponse
+ request model.PlcSubscriptionRequest
}
func NewDefaultPlcSubscriptionResponse(request model.PlcSubscriptionRequest,
responseCodes map[string]model.PlcResponseCode) DefaultPlcSubscriptionResponse {
return DefaultPlcSubscriptionResponse{
- request: request,
- responseCodes: responseCodes,
+ DefaultResponse: NewDefaultResponse(responseCodes),
+ request: request,
}
}
@@ -51,10 +51,6 @@ func (m DefaultPlcSubscriptionResponse) GetFieldNames()
[]string {
return fieldNames
}
-func (m DefaultPlcSubscriptionResponse) GetResponseCode(name string)
model.PlcResponseCode {
- return m.responseCodes[name]
-}
-
func (m DefaultPlcSubscriptionResponse) GetValue(name string) interface{} {
panic("not implemented: implement me")
}
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcWriteRequest.go
b/plc4go/internal/plc4go/spi/model/DefaultPlcWriteRequest.go
index 94c9484..ae5eb75 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcWriteRequest.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcWriteRequest.go
@@ -52,16 +52,18 @@ func NewDefaultPlcWriteRequestBuilder(fieldHandler
spi.PlcFieldHandler, valueHan
}
}
-func (m *DefaultPlcWriteRequestBuilder) AddQuery(name string, query string,
value interface{}) {
+func (m *DefaultPlcWriteRequestBuilder) AddQuery(name string, query string,
value interface{}) model.PlcWriteRequestBuilder {
m.queryNames = append(m.queryNames, name)
m.queries[name] = query
m.values[name] = value
+ return m
}
-func (m *DefaultPlcWriteRequestBuilder) AddField(name string, field
model.PlcField, value interface{}) {
+func (m *DefaultPlcWriteRequestBuilder) AddField(name string, field
model.PlcField, value interface{}) model.PlcWriteRequestBuilder {
m.fieldNames = append(m.fieldNames, name)
m.fields[name] = field
m.values[name] = value
+ return m
}
func (m *DefaultPlcWriteRequestBuilder) Build() (model.PlcWriteRequest, error)
{
@@ -84,31 +86,21 @@ func (m *DefaultPlcWriteRequestBuilder) Build()
(model.PlcWriteRequest, error) {
}
plcValues[name] = value
}
- return DefaultPlcWriteRequest{
- fields: m.fields,
- fieldNames: m.fieldNames,
- values: plcValues,
- writer: m.writer,
- }, nil
+ return NewDefaultPlcWriteRequest(m.fields, m.fieldNames, plcValues,
m.writer), nil
}
type DefaultPlcWriteRequest struct {
- fields map[string]model.PlcField
- fieldNames []string
- values map[string]values.PlcValue
- writer spi.PlcWriter
+ DefaultRequest
+ values map[string]values.PlcValue
+ writer spi.PlcWriter
}
-func (m DefaultPlcWriteRequest) Execute() <-chan model.PlcWriteRequestResult {
- return m.writer.Write(m)
-}
-
-func (m DefaultPlcWriteRequest) GetFieldNames() []string {
- return m.fieldNames
+func NewDefaultPlcWriteRequest(fields map[string]model.PlcField, fieldNames
[]string, values map[string]values.PlcValue, writer spi.PlcWriter)
model.PlcWriteRequest {
+ return DefaultPlcWriteRequest{NewDefaultRequest(fields, fieldNames),
values, writer}
}
-func (m DefaultPlcWriteRequest) GetField(name string) model.PlcField {
- return m.fields[name]
+func (m DefaultPlcWriteRequest) Execute() <-chan model.PlcWriteRequestResult {
+ return m.writer.Write(m)
}
func (m DefaultPlcWriteRequest) GetValue(name string) values.PlcValue {
diff --git a/plc4go/internal/plc4go/spi/model/DefaultPlcWriteResponse.go
b/plc4go/internal/plc4go/spi/model/DefaultPlcWriteResponse.go
index c2367b7..c5fe0c3 100644
--- a/plc4go/internal/plc4go/spi/model/DefaultPlcWriteResponse.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultPlcWriteResponse.go
@@ -25,14 +25,14 @@ import (
)
type DefaultPlcWriteResponse struct {
- request model.PlcWriteRequest
- responseCodes map[string]model.PlcResponseCode
+ DefaultResponse
+ request model.PlcWriteRequest
}
func NewDefaultPlcWriteResponse(request model.PlcWriteRequest, responseCodes
map[string]model.PlcResponseCode) DefaultPlcWriteResponse {
return DefaultPlcWriteResponse{
- request: request,
- responseCodes: responseCodes,
+ DefaultResponse: NewDefaultResponse(responseCodes),
+ request: request,
}
}
@@ -51,10 +51,6 @@ func (m DefaultPlcWriteResponse) GetRequest()
model.PlcWriteRequest {
return m.request
}
-func (m DefaultPlcWriteResponse) GetResponseCode(name string)
model.PlcResponseCode {
- return m.responseCodes[name]
-}
-
func (m DefaultPlcWriteResponse) MarshalXML(e *xml.Encoder, start
xml.StartElement) error {
if err := e.EncodeToken(xml.StartElement{Name: xml.Name{Local:
"PlcWriteResponse"}}); err != nil {
return err
diff --git a/plc4go/pkg/plc4go/model/plc_read.go
b/plc4go/internal/plc4go/spi/model/DefaultRequest.go
similarity index 56%
copy from plc4go/pkg/plc4go/model/plc_read.go
copy to plc4go/internal/plc4go/spi/model/DefaultRequest.go
index b603144..12ff0b3 100644
--- a/plc4go/pkg/plc4go/model/plc_read.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultRequest.go
@@ -19,31 +19,24 @@
package model
-import "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
+import "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
-type PlcReadRequestBuilder interface {
- AddQuery(name string, query string)
- AddField(name string, field PlcField)
- Build() (PlcReadRequest, error)
+type DefaultRequest struct {
+ fields map[string]model.PlcField
+ fieldNames []string
}
-type PlcReadRequestResult struct {
- Request PlcReadRequest
- Response PlcReadResponse
- Err error
+func NewDefaultRequest(Fields map[string]model.PlcField, FieldNames []string)
DefaultRequest {
+ return DefaultRequest{Fields, FieldNames}
}
-type PlcReadRequest interface {
- Execute() <-chan PlcReadRequestResult
- GetFieldNames() []string
- GetField(name string) PlcField
- PlcRequest
+func (m DefaultRequest) GetFieldNames() []string {
+ return m.fieldNames
}
-type PlcReadResponse interface {
- GetRequest() PlcReadRequest
- GetFieldNames() []string
- GetResponseCode(name string) PlcResponseCode
- GetValue(name string) values.PlcValue
- PlcResponse
+func (m DefaultRequest) GetField(name string) model.PlcField {
+ if field, ok := m.fields[name]; ok {
+ return field
+ }
+ return nil
}
diff --git a/plc4go/pkg/plc4go/model/plc_read.go
b/plc4go/internal/plc4go/spi/model/DefaultResponse.go
similarity index 56%
copy from plc4go/pkg/plc4go/model/plc_read.go
copy to plc4go/internal/plc4go/spi/model/DefaultResponse.go
index b603144..a0ae83a 100644
--- a/plc4go/pkg/plc4go/model/plc_read.go
+++ b/plc4go/internal/plc4go/spi/model/DefaultResponse.go
@@ -19,31 +19,16 @@
package model
-import "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
+import "github.com/apache/plc4x/plc4go/pkg/plc4go/model"
-type PlcReadRequestBuilder interface {
- AddQuery(name string, query string)
- AddField(name string, field PlcField)
- Build() (PlcReadRequest, error)
+type DefaultResponse struct {
+ responseCodes map[string]model.PlcResponseCode
}
-type PlcReadRequestResult struct {
- Request PlcReadRequest
- Response PlcReadResponse
- Err error
+func (m DefaultResponse) GetResponseCode(name string) model.PlcResponseCode {
+ return m.responseCodes[name]
}
-type PlcReadRequest interface {
- Execute() <-chan PlcReadRequestResult
- GetFieldNames() []string
- GetField(name string) PlcField
- PlcRequest
-}
-
-type PlcReadResponse interface {
- GetRequest() PlcReadRequest
- GetFieldNames() []string
- GetResponseCode(name string) PlcResponseCode
- GetValue(name string) values.PlcValue
- PlcResponse
+func NewDefaultResponse(responseCodes map[string]model.PlcResponseCode)
DefaultResponse {
+ return DefaultResponse{responseCodes}
}
diff --git a/plc4go/pkg/plc4go/model/plc_browse.go
b/plc4go/pkg/plc4go/model/plc_browse.go
index f51ac1c..960992d 100644
--- a/plc4go/pkg/plc4go/model/plc_browse.go
+++ b/plc4go/pkg/plc4go/model/plc_browse.go
@@ -20,7 +20,7 @@
package model
type PlcBrowseRequestBuilder interface {
- AddItem(name string, query string)
+ AddItem(name string, query string) PlcBrowseRequestBuilder
Build() (PlcBrowseRequest, error)
}
diff --git a/plc4go/pkg/plc4go/model/plc_read.go
b/plc4go/pkg/plc4go/model/plc_read.go
index b603144..8334d99 100644
--- a/plc4go/pkg/plc4go/model/plc_read.go
+++ b/plc4go/pkg/plc4go/model/plc_read.go
@@ -22,8 +22,8 @@ package model
import "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
type PlcReadRequestBuilder interface {
- AddQuery(name string, query string)
- AddField(name string, field PlcField)
+ AddQuery(name string, query string) PlcReadRequestBuilder
+ AddField(name string, field PlcField) PlcReadRequestBuilder
Build() (PlcReadRequest, error)
}
diff --git a/plc4go/pkg/plc4go/model/plc_subscription.go
b/plc4go/pkg/plc4go/model/plc_subscription.go
index d139762..0801d4b 100644
--- a/plc4go/pkg/plc4go/model/plc_subscription.go
+++ b/plc4go/pkg/plc4go/model/plc_subscription.go
@@ -36,13 +36,13 @@ type PlcSubscriptionEvent interface {
type PlcSubscriptionEventHandler func(event PlcSubscriptionEvent)
type PlcSubscriptionRequestBuilder interface {
- AddCyclicQuery(name string, query string, interval time.Duration)
- AddCyclicField(name string, field PlcField, interval time.Duration)
- AddChangeOfStateQuery(name string, query string)
- AddChangeOfStateField(name string, field PlcField)
- AddEventQuery(name string, query string)
- AddEventField(name string, field PlcField)
- AddItemHandler(handler PlcSubscriptionEventHandler)
+ AddCyclicQuery(name string, query string, interval time.Duration)
PlcSubscriptionRequestBuilder
+ AddCyclicField(name string, field PlcField, interval time.Duration)
PlcSubscriptionRequestBuilder
+ AddChangeOfStateQuery(name string, query string)
PlcSubscriptionRequestBuilder
+ AddChangeOfStateField(name string, field PlcField)
PlcSubscriptionRequestBuilder
+ AddEventQuery(name string, query string) PlcSubscriptionRequestBuilder
+ AddEventField(name string, field PlcField) PlcSubscriptionRequestBuilder
+ AddItemHandler(handler PlcSubscriptionEventHandler)
PlcSubscriptionRequestBuilder
Build() (PlcSubscriptionRequest, error)
}
diff --git a/plc4go/pkg/plc4go/model/plc_write.go
b/plc4go/pkg/plc4go/model/plc_write.go
index c84395c..88d4f3c 100644
--- a/plc4go/pkg/plc4go/model/plc_write.go
+++ b/plc4go/pkg/plc4go/model/plc_write.go
@@ -22,8 +22,8 @@ package model
import "github.com/apache/plc4x/plc4go/pkg/plc4go/values"
type PlcWriteRequestBuilder interface {
- AddQuery(name string, query string, value interface{})
- AddField(name string, field PlcField, value interface{})
+ AddQuery(name string, query string, value interface{})
PlcWriteRequestBuilder
+ AddField(name string, field PlcField, value interface{})
PlcWriteRequestBuilder
Build() (PlcWriteRequest, error)
}