Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drop WithContext methods and add context to all methods #554

Merged
merged 1 commit into from
Aug 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
301 changes: 67 additions & 234 deletions client.go

Large diffs are not rendered by default.

16 changes: 4 additions & 12 deletions client_sub.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,7 @@ import (
// Subscribe creates a Subscription with given parameters.
// Parameters that have not been set are set to their default values.
// See opcua.DefaultSubscription* constants
//
// Note: Starting with v0.5 this method will require a context
// and the corresponding XXXWithContext(ctx) method will be removed.
func (c *Client) Subscribe(params *SubscriptionParameters, notifyCh chan<- *PublishNotificationData) (*Subscription, error) {
return c.SubscribeWithContext(context.Background(), params, notifyCh)
}

// Note: Starting with v0.5 this method is superseded by the non 'WithContext' method.
func (c *Client) SubscribeWithContext(ctx context.Context, params *SubscriptionParameters, notifyCh chan<- *PublishNotificationData) (*Subscription, error) {
func (c *Client) Subscribe(ctx context.Context, params *SubscriptionParameters, notifyCh chan<- *PublishNotificationData) (*Subscription, error) {
stats.Client().Add("Subscribe", 1)

if params == nil {
Expand All @@ -43,7 +35,7 @@ func (c *Client) SubscribeWithContext(ctx context.Context, params *SubscriptionP
}

var res *ua.CreateSubscriptionResponse
err := c.SendWithContext(ctx, req, func(v interface{}) error {
err := c.Send(ctx, req, func(v interface{}) error {
return safeAssign(v, &res)
})
if err != nil {
Expand Down Expand Up @@ -118,7 +110,7 @@ func (c *Client) transferSubscriptions(ctx context.Context, ids []uint32) (*ua.T
}

var res *ua.TransferSubscriptionsResponse
err := c.SendWithContext(ctx, req, func(v interface{}) error {
err := c.Send(ctx, req, func(v interface{}) error {
return safeAssign(v, &res)
})
return res, err
Expand Down Expand Up @@ -186,7 +178,7 @@ func (c *Client) sendRepublishRequests(ctx context.Context, sub *Subscription, a

debug.Printf("RepublishRequest: req=%s", debug.ToJSON(req))
var res *ua.RepublishResponse
err := sc.SendRequestWithContext(ctx, req, s.resp.AuthenticationToken, func(v interface{}) error {
err := c.SecureChannel().SendRequest(ctx, req, c.Session().resp.AuthenticationToken, func(v interface{}) error {
return safeAssign(v, &res)
})
debug.Printf("RepublishResponse: res=%s err=%v", debug.ToJSON(res), err)
Expand Down
5 changes: 3 additions & 2 deletions client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,15 @@ import (
"context"
"testing"

"github.com/pascaldekloe/goe/verify"

"github.com/gopcua/opcua/id"
"github.com/gopcua/opcua/ua"
"github.com/pascaldekloe/goe/verify"
)

func TestClient_Send_DoesNotPanicWhenDisconnected(t *testing.T) {
c := NewClient("opc.tcp://example.com:4840")
err := c.SendWithContext(context.Background(), &ua.ReadRequest{}, func(i interface{}) error {
err := c.Send(context.Background(), &ua.ReadRequest{}, func(i interface{}) error {
return nil
})
verify.Values(t, "", err, ua.StatusBadServerNotConnected)
Expand Down
8 changes: 4 additions & 4 deletions examples/accesslevel/accesslevel.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,27 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

id, err := ua.ParseNodeID(*nodeID)
if err != nil {
log.Fatal(err)
}

n := c.Node(id)
accessLevel, err := n.AccessLevelWithContext(ctx)
accessLevel, err := n.AccessLevel(ctx)
if err != nil {
log.Fatal(err)
}
log.Print("AccessLevel: ", accessLevel)

userAccessLevel, err := n.UserAccessLevelWithContext(ctx)
userAccessLevel, err := n.UserAccessLevel(ctx)
if err != nil {
log.Fatal(err)
}
log.Print("UserAccessLevel: ", userAccessLevel)

v, err := n.ValueWithContext(ctx)
v, err := n.Value(ctx)
switch {
case err != nil:
log.Fatal(err)
Expand Down
6 changes: 3 additions & 3 deletions examples/browse/browse.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ func browse(ctx context.Context, n *opcua.Node, path string, level int) ([]NodeD
return nil, nil
}

attrs, err := n.AttributesWithContext(ctx, ua.AttributeIDNodeClass, ua.AttributeIDBrowseName, ua.AttributeIDDescription, ua.AttributeIDAccessLevel, ua.AttributeIDDataType)
attrs, err := n.Attributes(ctx, ua.AttributeIDNodeClass, ua.AttributeIDBrowseName, ua.AttributeIDDescription, ua.AttributeIDAccessLevel, ua.AttributeIDDataType)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -138,7 +138,7 @@ func browse(ctx context.Context, n *opcua.Node, path string, level int) ([]NodeD
}

browseChildren := func(refType uint32) error {
refs, err := n.ReferencedNodesWithContext(ctx, refType, ua.BrowseDirectionForward, ua.NodeClassAll, true)
refs, err := n.ReferencedNodes(ctx, refType, ua.BrowseDirectionForward, ua.NodeClassAll, true)
if err != nil {
return errors.Errorf("References: %d: %s", refType, err)
}
Expand Down Expand Up @@ -178,7 +178,7 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

id, err := ua.ParseNodeID(*nodeID)
if err != nil {
Expand Down
12 changes: 6 additions & 6 deletions examples/crypto/crypto.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,10 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

// Use our connection (read the server's time)
v, err := c.Node(ua.NewNumericNodeID(0, 2258)).ValueWithContext(ctx)
v, err := c.Node(ua.NewNumericNodeID(0, 2258)).Value(ctx)
if err != nil {
log.Fatal(err)
}
Expand All @@ -81,7 +81,7 @@ func main() {
}

// Detach our session and try re-establish it on a different secure channel
s, err := c.DetachSessionWithContext(ctx)
s, err := c.DetachSession(ctx)
if err != nil {
log.Fatalf("Error detaching session: %s", err)
}
Expand All @@ -90,16 +90,16 @@ func main() {

// Create a channel only and do not activate it automatically
d.Dial(ctx)
defer d.CloseWithContext(ctx)
defer d.Close(ctx)

// Activate the previous session on the new channel
err = d.ActivateSessionWithContext(ctx, s)
err = d.ActivateSession(ctx, s)
if err != nil {
log.Fatalf("Error reactivating session: %s", err)
}

// Read the time again to prove our session is still OK
v, err = d.Node(ua.NewNumericNodeID(0, 2258)).ValueWithContext(ctx)
v, err = d.Node(ua.NewNumericNodeID(0, 2258)).Value(ctx)
if err != nil {
log.Fatal(err)
}
Expand Down
4 changes: 2 additions & 2 deletions examples/datetime/datetime.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

v, err := c.Node(ua.NewNumericNodeID(0, 2258)).ValueWithContext(ctx)
v, err := c.Node(ua.NewNumericNodeID(0, 2258)).Value(ctx)
switch {
case err != nil:
log.Fatal(err)
Expand Down
4 changes: 2 additions & 2 deletions examples/history-read/history-read.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

id, err := ua.ParseNodeID(*nodeID)
if err != nil {
Expand All @@ -54,7 +54,7 @@ func main() {
// Reset old nodes
nodesToRequest = make([]*ua.HistoryReadValueID, 0)

data, err := c.HistoryReadRawModifiedWithContext(ctx, nodes, &ua.ReadRawModifiedDetails{
data, err := c.HistoryReadRawModified(ctx, nodes, &ua.ReadRawModifiedDetails{
IsReadModified: false,
StartTime: time.Now().UTC().AddDate(0, -1, 0),
EndTime: time.Now().UTC().AddDate(0, 1, 0),
Expand Down
4 changes: 2 additions & 2 deletions examples/method/method.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

in := int64(12)
req := &ua.CallMethodRequest{
Expand All @@ -37,7 +37,7 @@ func main() {
InputArguments: []*ua.Variant{ua.MustVariant(in)},
}

resp, err := c.CallWithContext(ctx, req)
resp, err := c.Call(ctx, req)
if err != nil {
log.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion examples/monitor/monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func main() {
log.Fatal(err)
}

defer c.CloseWithContext(ctx)
defer c.Close(ctx)

m, err := monitor.NewNodeMonitor(c)
if err != nil {
Expand Down
4 changes: 2 additions & 2 deletions examples/read/read.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

id, err := ua.ParseNodeID(*nodeID)
if err != nil {
Expand All @@ -49,7 +49,7 @@ func main() {

var resp *ua.ReadResponse
for {
resp, err = c.ReadWithContext(ctx, req)
resp, err = c.Read(ctx, req)
if err == nil {
break
}
Expand Down
8 changes: 4 additions & 4 deletions examples/regread/regread.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

id, err := ua.ParseNodeID(*nodeID)
if err != nil {
log.Fatalf("invalid node id: %v", err)
}

regResp, err := c.RegisterNodesWithContext(ctx, &ua.RegisterNodesRequest{
regResp, err := c.RegisterNodes(ctx, &ua.RegisterNodesRequest{
NodesToRegister: []*ua.NodeID{id},
})
if err != nil {
Expand All @@ -51,7 +51,7 @@ func main() {
TimestampsToReturn: ua.TimestampsToReturnBoth,
}

resp, err := c.ReadWithContext(ctx, req)
resp, err := c.Read(ctx, req)
if err != nil {
log.Fatalf("Read failed: %s", err)
}
Expand All @@ -60,7 +60,7 @@ func main() {
}
log.Print(resp.Results[0].Value.Value())

_, err = c.UnregisterNodesWithContext(ctx, &ua.UnregisterNodesRequest{
_, err = c.UnregisterNodes(ctx, &ua.UnregisterNodesRequest{
NodesToUnregister: []*ua.NodeID{id},
})
if err != nil {
Expand Down
6 changes: 3 additions & 3 deletions examples/subscribe/subscribe.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,11 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

notifyCh := make(chan *opcua.PublishNotificationData)

sub, err := c.SubscribeWithContext(ctx, &opcua.SubscriptionParameters{
sub, err := c.Subscribe(ctx, &opcua.SubscriptionParameters{
Interval: *interval,
}, notifyCh)
if err != nil {
Expand All @@ -89,7 +89,7 @@ func main() {
} else {
miCreateRequest = valueRequest(id)
}
res, err := sub.Monitor(ua.TimestampsToReturnBoth, miCreateRequest)
res, err := sub.Monitor(ctx, ua.TimestampsToReturnBoth, miCreateRequest)
if err != nil || res.Results[0].StatusCode != ua.StatusOK {
log.Fatal(err)
}
Expand Down
4 changes: 2 additions & 2 deletions examples/translate/translate.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

root := c.Node(ua.NewTwoByteNodeID(id.ObjectsFolder))
nodeID, err := root.TranslateBrowsePathInNamespaceToNodeIDWithContext(ctx, uint16(*ns), *nodePath)
nodeID, err := root.TranslateBrowsePathInNamespaceToNodeID(ctx, uint16(*ns), *nodePath)
if err != nil {
log.Fatal(err)
}
Expand Down
8 changes: 4 additions & 4 deletions examples/trigger/trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,11 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

notifyCh := make(chan *opcua.PublishNotificationData)

sub, err := c.Subscribe(&opcua.SubscriptionParameters{
sub, err := c.Subscribe(ctx, &opcua.SubscriptionParameters{
Interval: *interval,
}, notifyCh)
if err != nil {
Expand Down Expand Up @@ -105,13 +105,13 @@ func main() {
},
}

subRes, err := sub.Monitor(ua.TimestampsToReturnBoth, miCreateRequests...)
subRes, err := sub.Monitor(ctx, ua.TimestampsToReturnBoth, miCreateRequests...)
if err != nil || subRes.Results[0].StatusCode != ua.StatusOK {
log.Fatal(err)
}

triggeringServerID, triggeredServerID := subRes.Results[0].MonitoredItemID, subRes.Results[1].MonitoredItemID
tRes, err := sub.SetTriggering(triggeringServerID, []uint32{triggeredServerID}, nil)
tRes, err := sub.SetTriggering(ctx, triggeringServerID, []uint32{triggeredServerID}, nil)

if err != nil {
log.Fatal(err)
Expand Down
4 changes: 2 additions & 2 deletions examples/udt/udt.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,9 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

v, err := c.Node(id).ValueWithContext(ctx)
v, err := c.Node(id).Value(ctx)
switch {
case err != nil:
log.Fatal(err)
Expand Down
4 changes: 2 additions & 2 deletions examples/write/write.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ func main() {
if err := c.Connect(ctx); err != nil {
log.Fatal(err)
}
defer c.CloseWithContext(ctx)
defer c.Close(ctx)

id, err := ua.ParseNodeID(*nodeID)
if err != nil {
Expand All @@ -55,7 +55,7 @@ func main() {
},
}

resp, err := c.WriteWithContext(ctx, req)
resp, err := c.Write(ctx, req)
if err != nil {
log.Fatalf("Write failed: %s", err)
}
Expand Down