Files
tecamino-driver-artNet/driver/bus.go
2025-04-29 08:34:51 +02:00

149 lines
3.4 KiB
Go

package driver
import (
"artNet/auth"
"artNet/models"
"fmt"
"net"
"net/http"
"github.com/gin-gonic/gin"
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.GetIDFromAuth(c)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "id: " + err.Error()})
return
}
var payload models.Bus
if err := c.BindJSON(&payload); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "json: " + err.Error()})
return
}
if payload.Name == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "bus name missing"})
return
} else if addr := net.ParseIP(payload.Ip); addr == nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "wrong ip '" + payload.Ip + "'"})
return
}
if _, ok := d.Buses[payload.Name]; ok {
c.JSON(http.StatusOK, gin.H{"message": "bus " + payload.Name + " exists already"})
return
}
bus := d.NewBus(payload.Name, payload.Ip, payload.GetPort())
c.JSON(http.StatusOK, gin.H{
"message": fmt.Sprintf("bus '%s' successfully created with ip: %s and on port: %d", bus.Name, bus.Ip, bus.GetPort()),
})
d.cfgHandler.SaveCfg(*d)
}
func (d *ArtNetDriver) RemoveBus(c *gin.Context) {
_, err := auth.GetIDFromAuth(c)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "id: " + err.Error()})
return
}
var payload models.Bus
if err := c.BindJSON(&payload); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "json: " + err.Error()})
return
}
if payload.Name == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "bus name missing"})
return
}
if _, ok := d.Buses[payload.Name]; !ok {
r := json_dataModels.NewResponse()
r.SendMessage("bus " + payload.Name + " not found")
c.JSON(http.StatusOK, r)
return
} else {
delete(d.Buses, payload.Name)
}
r := json_dataModels.NewResponse()
r.SendMessage(fmt.Sprintf("bus '%s' successfully removed", payload.Name))
c.JSON(http.StatusOK, r)
d.cfgHandler.SaveCfg(*d)
}
func (d *ArtNetDriver) Start(c *gin.Context) {
_, err := auth.GetIDFromAuth(c)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "id: " + err.Error()})
return
}
var payload models.Bus
if err := c.BindJSON(&payload); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "json: " + err.Error()})
return
}
if payload.Name == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "bus name missing"})
return
}
d.Buses[payload.Name].Start(d.Log)
r := json_dataModels.NewResponse()
r.SendMessage(fmt.Sprintf("bus '%s' running", payload.Name))
c.JSON(http.StatusOK, r)
d.cfgHandler.SaveCfg(*d)
}
func (d *ArtNetDriver) Stop(c *gin.Context) {
_, err := auth.GetIDFromAuth(c)
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "id: " + err.Error()})
return
}
var payload models.Bus
if err := c.BindJSON(&payload); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "json: " + err.Error()})
return
}
if payload.Name == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "bus name missing"})
return
}
d.Buses[payload.Name].Stop()
r := json_dataModels.NewResponse()
r.SendMessage(fmt.Sprintf("bus '%s' stopped", payload.Name))
c.JSON(http.StatusOK, r)
d.cfgHandler.SaveCfg(*d)
}