package driver import ( "context" "log" "time" "artNet/auth" "artNet/models" "github.com/coder/websocket" "github.com/coder/websocket/wsjson" "github.com/gin-gonic/gin" ) const ( OnCreate = "onCreate" OnChange = "onChange" OnDelete = "onDelete" ) func (d *ArtNetDriver) Websocket(c *gin.Context) { id, err := auth.GetIDFromAuth(c) if err != nil { d.Log.Error("artNet.webSocket.Websocket", "error GetIDFromAuth: "+err.Error()) log.Println("error id:", err) return } d.Log.Debug("artNet.webSocket.Websocket", "authorization id token: "+id) ctx, cancel := context.WithTimeout(c.Request.Context(), 10*time.Minute) defer cancel() conn, err := d.Connections.ConnectRecievingWsConnection(id, c) if err != nil { d.Log.Error("artNet.webSocket.Websocket", "error connecting recieving websocket conection: "+err.Error()) return } defer d.Connections.DisconnectRecievingWsConnection(id, websocket.StatusInternalError, "Internal error") var request models.JsonData //Read loop for { err := wsjson.Read(ctx, conn, &request) if err != nil { d.Log.Error("artNet.webSocket.Websocket", "read error:"+err.Error()) log.Println("WebSocket read error:", err) break } // Set if request.Set != nil { for _, set := range *request.Set { if err = d.SetValue(set); err != nil { d.Log.Error("artNet.webSocket.Websocket", "set value error"+err.Error()) log.Println(err) continue } time.Sleep(23 * time.Millisecond) } } } }