From d11cd844534cafd6ef7afed95782d22305cd11b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Schr=C3=B6der?= Date: Sat, 25 Sep 2021 09:37:31 +0200 Subject: [PATCH] remove monitored items on Unmonitor Fixes #458 --- subscription.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/subscription.go b/subscription.go index 39c67162..fbcb60b9 100644 --- a/subscription.go +++ b/subscription.go @@ -128,6 +128,7 @@ func (s *Subscription) Monitor(ts ua.TimestampsToReturn, items ...*ua.MonitoredI } // store monitored items + // todo(fs): should we guard this with a lock? for i, item := range items { result := res.Results[i] @@ -149,10 +150,27 @@ func (s *Subscription) Unmonitor(monitoredItemIDs ...uint32) (*ua.DeleteMonitore MonitoredItemIDs: monitoredItemIDs, SubscriptionID: s.SubscriptionID, } + var res *ua.DeleteMonitoredItemsResponse err := s.c.Send(req, func(v interface{}) error { return safeAssign(v, &res) }) + + if err == nil { + // remove monitored items + // todo(fs): should we guard this with a lock? + var items []*monitoredItem + for _, id := range monitoredItemIDs { + for _, item := range s.items { + if item.createResult.MonitoredItemID == id { + continue + } + items = append(items, item) + } + } + s.items = items + } + return res, err }