From c57c22f93a2b2e4053220aae91f0f11c0a3f3e90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Z=C3=BCrcher?= Date: Wed, 28 May 2025 22:04:40 +0200 Subject: [PATCH] add new parameter hasChild and set with connection id --- dbm/get.go | 11 ++++++----- dbm/json_data.go | 26 +++++++++++++------------- dbm/set.go | 25 +++++++++++++++++++++++-- dbm/subscribe.go | 25 +++++++++++++++++++------ dbm/webSocket.go | 2 +- 5 files changed, 62 insertions(+), 27 deletions(-) diff --git a/dbm/get.go b/dbm/get.go index 0765220..8d4f3a3 100644 --- a/dbm/get.go +++ b/dbm/get.go @@ -24,11 +24,12 @@ func (d *DBMHandler) Get(req *json_dataModels.Request, id string) { for _, dp := range d.DBM.QueryDatapoints(depth, get.Uuid, get.Path) { resp.AddGet(json_dataModels.Get{ - Uuid: dp.Uuid, - Path: dp.Path, - Type: dp.Type, - Value: dp.Value, - Rights: dp.ReadWrite, + Uuid: dp.Uuid, + Path: dp.Path, + Type: dp.Type, + Value: dp.Value, + HasChild: dp.Datapoints != nil, + Rights: dp.ReadWrite, }) } } diff --git a/dbm/json_data.go b/dbm/json_data.go index c139e3c..0d3c56f 100644 --- a/dbm/json_data.go +++ b/dbm/json_data.go @@ -20,29 +20,29 @@ func (d *DBMHandler) Json_Data(c *gin.Context) { return } - respond := json_dataModels.NewResponse() + resp := json_dataModels.NewResponse() - if payload.Get != nil { + if len(payload.Get) > 0 { var depth uint = 1 + for _, get := range payload.Get { if get.Query != nil { depth = get.Query.Depth } for _, res := range d.DBM.QueryDatapoints(depth, get.Uuid, get.Path) { - respond.AddGet(json_dataModels.Get{ - Uuid: res.Uuid, - Path: res.Path, - Type: res.Type, - Value: res.Value, - Rights: res.ReadWrite, - Drivers: &res.Drivers, + resp.AddGet(json_dataModels.Get{ + Uuid: res.Uuid, + Path: res.Path, + Type: res.Type, + Value: res.Value, + HasChild: res.Datapoints != nil, + Rights: res.ReadWrite, }) } } - } - if payload.Set != nil { - respond.Set, err = d.DBM.CreateDatapoints(payload.Set...) + if len(payload.Set) > 0 { + resp.Set, err = d.DBM.CreateDatapoints(payload.Set...) if err != nil { r := json_data.NewResponse() r.SetError() @@ -52,7 +52,7 @@ func (d *DBMHandler) Json_Data(c *gin.Context) { } } - c.JSON(200, respond) + c.JSON(200, resp) } func (d *DBMHandler) Delete(c *gin.Context) { diff --git a/dbm/set.go b/dbm/set.go index 5ed7f3d..b88fb6c 100644 --- a/dbm/set.go +++ b/dbm/set.go @@ -1,10 +1,12 @@ package dbm import ( + "fmt" + json_dataModels "github.com/tecamino/tecamino-json_data/models" ) -func (d *DBMHandler) Set(req *json_dataModels.Request) { +func (d *DBMHandler) Set(req *json_dataModels.Request, id string) { if req == nil { return } else if len(req.Set) == 0 { @@ -13,9 +15,28 @@ func (d *DBMHandler) Set(req *json_dataModels.Request) { d.RLock() defer d.RUnlock() + resp := json_dataModels.NewResponse() + resp.Id = req.Id + for _, set := range req.Set { - for _, dp := range d.DBM.QueryDatapoints(1, set.Uuid, set.Path) { + dps := d.DBM.QueryDatapoints(1, set.Uuid, set.Path) + if len(dps) == 0 { + resp.SetError() + if resp.Message == "" { + resp.SetMessage(fmt.Sprintf("datapoint %s not found", set.Path)) + } + continue + } + for _, dp := range dps { dp.UpdateValue(d.Conns, set.Value) + resp.AddSet(json_dataModels.Set{ + Uuid: dp.Uuid, + Path: dp.Path, + Value: dp.Value, + }) } } + if err := d.Conns.SendResponse(id, resp); err != nil { + d.Log.Error("get.Set", err.Error()) + } } diff --git a/dbm/subscribe.go b/dbm/subscribe.go index c705952..b5f849c 100644 --- a/dbm/subscribe.go +++ b/dbm/subscribe.go @@ -1,6 +1,8 @@ package dbm import ( + "fmt" + json_dataModels "github.com/tecamino/tecamino-json_data/models" ) @@ -18,7 +20,17 @@ func (d *DBMHandler) Subscribe(req *json_dataModels.Request, id string) { resp.Id = req.Id for _, sub := range req.Subscribe { - for _, dp := range d.DBM.QueryDatapoints(sub.Depth, sub.Uuid, sub.Path) { + dps := d.DBM.QueryDatapoints(sub.Depth, sub.Uuid, sub.Path) + + if len(dps) == 0 { + resp.SetError() + if resp.Message == "" { + resp.SetMessage(fmt.Sprintf("datapoint %s not found", sub.Path)) + } + continue + } + + for _, dp := range dps { if sub.Driver != "" { if dp.Drivers == nil || dp.Drivers[sub.Driver] == nil { continue @@ -26,11 +38,12 @@ func (d *DBMHandler) Subscribe(req *json_dataModels.Request, id string) { } dp.AddSubscribtion(id, sub) resp.AddSubscription(json_dataModels.Subscription{ - Uuid: dp.Uuid, - Path: dp.Path, - Value: dp.Value, - Driver: sub.Driver, - Drivers: &dp.Drivers, + Uuid: dp.Uuid, + Path: dp.Path, + Value: dp.Value, + HasChild: dp.Datapoints != nil, + Driver: sub.Driver, + Drivers: &dp.Drivers, }) } } diff --git a/dbm/webSocket.go b/dbm/webSocket.go index e57cf9e..5917ccd 100644 --- a/dbm/webSocket.go +++ b/dbm/webSocket.go @@ -47,7 +47,7 @@ func (d *DBMHandler) WebSocket(c *gin.Context) { d.Get(request, id) // Sets - d.Set(request) + d.Set(request, id) // Subscribe d.Subscribe(request, id)