Skip to content

Commit

Permalink
Merge pull request #554 from gopcua/issue-553-drop-with-context
Browse files Browse the repository at this point in the history
Drop WithContext methods and add context to all methods
  • Loading branch information
magiconair committed Aug 14, 2023
2 parents 0d8211a + 4d56b5d commit 3425f7b
Show file tree
Hide file tree
Showing 28 changed files with 199 additions and 610 deletions.
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

0 comments on commit 3425f7b

Please sign in to comment.