package driver import ( "artNet/auth" "artNet/models" "fmt" "net" "net/http" "github.com/gin-gonic/gin" json_data "github.com/tecamino/tecamino-json_data" json_dataModels "github.com/tecamino/tecamino-json_data/models" ) // sends a list of all buses in the driver func (d *ArtNetDriver) GetAllBuses(c *gin.Context) { var data any if len(d.Buses) == 0 { data = "no buses avaiable" } else { data = *d } c.JSON(200, gin.H{ "buses": data, }) } func (d *ArtNetDriver) CreateBus(c *gin.Context) { _, err := auth.GetIDFromQuery(c) if err != nil { r := json_data.NewResponse() r.SetError() r.SetMessage(err.Error()) c.JSON(http.StatusBadRequest, r) return } busPayload := models.Bus{} if err := busPayload.ParsePayload(c); err != nil { return } if addr := net.ParseIP(busPayload.Ip); addr == nil { r := json_data.NewResponse() r.SetError() r.SetMessage("wrong ip '" + busPayload.Ip + "'") c.JSON(http.StatusBadRequest, r) return } if _, ok := d.Buses[busPayload.Name]; ok { r := json_data.NewResponse() r.SetError() r.SetMessage("bus " + busPayload.Name + " exists already") c.JSON(http.StatusOK, r) return } bus := d.NewBus(busPayload.Name, busPayload.Ip, busPayload.GetPort()) r := json_data.NewResponse() r.SetMessage(fmt.Sprintf("bus '%s' successfully created with ip: %s and on port: %d", bus.Name, bus.Ip, bus.GetPort())) c.JSON(http.StatusOK, r) d.cfgHandler.SaveCfg(*d) } func (d *ArtNetDriver) RemoveBus(c *gin.Context) { _, err := auth.GetIDFromQuery(c) if err != nil { r := json_data.NewResponse() r.SetError() r.SetMessage("id: " + err.Error()) c.JSON(http.StatusBadRequest, r) return } busPayload := models.Bus{} if err := busPayload.ParsePayload(c); err != nil { return } if _, ok := d.Buses[busPayload.Name]; !ok { r := json_dataModels.NewResponse() r.SetMessage("bus " + busPayload.Name + " not found") c.JSON(http.StatusBadRequest, r) return } else { delete(d.Buses, busPayload.Name) } r := json_dataModels.NewResponse() r.SetMessage(fmt.Sprintf("bus '%s' successfully removed", busPayload.Name)) c.JSON(http.StatusOK, r) d.cfgHandler.SaveCfg(*d) } func (d *ArtNetDriver) Start(c *gin.Context) { _, err := auth.GetIDFromQuery(c) if err != nil { r := json_data.NewResponse() r.SetError() r.SetMessage("id: " + err.Error()) c.JSON(http.StatusBadRequest, r) return } busPayload := models.Bus{} if err := busPayload.ParsePayload(c); err != nil { return } d.Buses[busPayload.Name].Start(d.Log) r := json_dataModels.NewResponse() r.SetMessage(fmt.Sprintf("bus '%s' running", busPayload.Name)) c.JSON(http.StatusOK, r) } func (d *ArtNetDriver) Stop(c *gin.Context) { _, err := auth.GetIDFromQuery(c) if err != nil { r := json_data.NewResponse() r.SetError() r.SetMessage("id: " + err.Error()) c.JSON(http.StatusBadRequest, r) return } busPayload := models.Bus{} if err := busPayload.ParsePayload(c); err != nil { return } d.Buses[busPayload.Name].Stop() r := json_dataModels.NewResponse() r.SetMessage(fmt.Sprintf("bus '%s' stopped", busPayload.Name)) c.JSON(http.StatusOK, r) } func (d *ArtNetDriver) Resubscribe(c *gin.Context) { _, err := auth.GetIDFromQuery(c) if err != nil { r := json_data.NewResponse() r.SetError() r.SetMessage("id: " + err.Error()) c.JSON(http.StatusBadRequest, r) return } busPayload := models.Bus{} if err := busPayload.ParsePayload(c); err != nil { return } if _, ok := d.Buses[busPayload.Name]; !ok { r := json_dataModels.NewResponse() r.SetMessage("bus " + busPayload.Name + " not found") c.JSON(http.StatusBadRequest, r) return } if busPayload.Resubscribe == nil { r := json_dataModels.NewResponse() r.SetMessage("no resubscriptions in request") c.JSON(http.StatusBadRequest, r) return } d.Subscribe(*busPayload.Resubscribe...) } func (d *ArtNetDriver) Status(c *gin.Context) { _, err := auth.GetIDFromQuery(c) if err != nil { r := json_data.NewResponse() r.SetError() r.SetMessage("id: " + err.Error()) c.JSON(http.StatusBadRequest, r) return } busPayload := models.Bus{} if err := busPayload.ParsePayload(c); err != nil { return } r := json_dataModels.NewResponse() state := "stopped" if d.Buses[busPayload.Name].Status() { state = "running" } r.SetMessage(fmt.Sprintf("bus '%s' %s", busPayload.Name, state)) c.JSON(http.StatusOK, r) }