major change of server slim it down
This commit is contained in:
@@ -1,18 +0,0 @@
|
|||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *Server) AllBuses(c *gin.Context) {
|
|
||||||
var data any
|
|
||||||
if s.Driver.Bus == nil {
|
|
||||||
data = "no buses avaiable"
|
|
||||||
} else {
|
|
||||||
data = s.Driver.Bus
|
|
||||||
}
|
|
||||||
|
|
||||||
c.JSON(200, gin.H{
|
|
||||||
"buses": data,
|
|
||||||
})
|
|
||||||
}
|
|
@@ -1,25 +0,0 @@
|
|||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"artNet/models"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *Server) JsonRequest(c *gin.Context) {
|
|
||||||
var payload models.JsonData
|
|
||||||
|
|
||||||
if err := c.BindJSON(&payload); err != nil {
|
|
||||||
|
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.JSON(200, gin.H{
|
|
||||||
"name": payload,
|
|
||||||
})
|
|
||||||
return
|
|
||||||
|
|
||||||
}
|
|
@@ -1,7 +0,0 @@
|
|||||||
package models
|
|
||||||
|
|
||||||
type Response struct {
|
|
||||||
StatusCode int `json:"statusCode"`
|
|
||||||
Message string `json:"message,omitempty"`
|
|
||||||
Data string `json:"dat,omitempty"`
|
|
||||||
}
|
|
@@ -1,26 +0,0 @@
|
|||||||
package models
|
|
||||||
|
|
||||||
import "github.com/coder/websocket"
|
|
||||||
|
|
||||||
type Subscribers map[*websocket.Conn]*bool
|
|
||||||
|
|
||||||
func InitSubsrcibers() Subscribers {
|
|
||||||
return make(Subscribers)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Subscribers) Connect(conn *websocket.Conn) {
|
|
||||||
b := true
|
|
||||||
(*s)[conn] = &b
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Subscribers) DeleteSubsrcibers(conn *websocket.Conn) {
|
|
||||||
delete(*s, conn)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Subscribers) GetPointer(conn *websocket.Conn) *bool {
|
|
||||||
return (*s)[conn]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Subscribers) Disconnect(conn *websocket.Conn) {
|
|
||||||
*(*s)[conn] = false
|
|
||||||
}
|
|
@@ -1,16 +0,0 @@
|
|||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *Server) AddRoutes() {
|
|
||||||
|
|
||||||
s.engine.GET("/ws", s.handleWebSocket)
|
|
||||||
|
|
||||||
s.engine.GET("/allBuses", s.AllBuses)
|
|
||||||
|
|
||||||
s.engine.GET("/", func(c *gin.Context) {
|
|
||||||
c.String(200, "WebSocket Broadcast Server is running!")
|
|
||||||
})
|
|
||||||
}
|
|
@@ -2,47 +2,27 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
|
||||||
|
|
||||||
"artNet/cert"
|
"artNet/cert"
|
||||||
"artNet/driver"
|
|
||||||
serverModels "artNet/server/models"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/tecamino/tecamino-logger/logging"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Server struct {
|
type Server struct {
|
||||||
engine *gin.Engine
|
Routes *gin.Engine
|
||||||
sync.RWMutex
|
|
||||||
Subscribers serverModels.Subscribers
|
|
||||||
Logger *logging.Logger
|
|
||||||
Driver *driver.ArtNetDriver
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize new websocket server
|
||||||
func NewServer() *Server {
|
func NewServer() *Server {
|
||||||
s := Server{
|
return &Server{
|
||||||
engine: gin.Default(),
|
Routes: gin.Default(),
|
||||||
Subscribers: serverModels.InitSubsrcibers(),
|
|
||||||
}
|
}
|
||||||
s.AddRoutes()
|
|
||||||
|
|
||||||
s.Driver = driver.NewDriver()
|
|
||||||
|
|
||||||
return &s
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) ServeHttp(port uint) error {
|
func (s *Server) ServeHttp(port uint) error {
|
||||||
if err := s.engine.Run(fmt.Sprintf(":%d", port)); err != nil {
|
return s.Routes.Run(fmt.Sprintf(":%d", port))
|
||||||
return fmt.Errorf("failed to run http server: %v", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) ServeHttps(port uint, cert cert.Cert) error {
|
func (s *Server) ServeHttps(port uint, cert cert.Cert) error {
|
||||||
cert.GenerateSelfSignedCert()
|
return s.Routes.RunTLS(fmt.Sprintf(":%d", port), cert.CertFile, cert.KeyFile)
|
||||||
if err := s.engine.RunTLS(fmt.Sprintf(":%d", port), cert.CertFile, cert.KeyFile); err != nil {
|
|
||||||
return fmt.Errorf("failed to run https server: %v", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
@@ -1,13 +0,0 @@
|
|||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"artNet/models"
|
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *Server) Set(get models.Get) error {
|
|
||||||
if len(s.Driver.Bus) <= int(get.Bus) {
|
|
||||||
return fmt.Errorf("no bus number '%d' found", get.Bus)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
@@ -1,65 +0,0 @@
|
|||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"artNet/models"
|
|
||||||
|
|
||||||
"github.com/coder/websocket"
|
|
||||||
"github.com/coder/websocket/wsjson"
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
OnCreate = "onCreate"
|
|
||||||
OnChange = "onChange"
|
|
||||||
OnDelete = "onDelete"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s *Server) handleWebSocket(c *gin.Context) {
|
|
||||||
conn, err := websocket.Accept(c.Writer, c.Request, &websocket.AcceptOptions{
|
|
||||||
OriginPatterns: []string{"*"},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Upgrade error:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
defer conn.Close(websocket.StatusInternalError, "Internal error")
|
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(c.Request.Context(), 10*time.Minute)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
s.Subscribers.Connect(conn)
|
|
||||||
|
|
||||||
//Read loop
|
|
||||||
for {
|
|
||||||
var request models.JsonData
|
|
||||||
err := wsjson.Read(ctx, conn, &request)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(s.Subscribers[conn])
|
|
||||||
log.Println("WebSocket read error:", err)
|
|
||||||
s.Subscribers.Disconnect(conn)
|
|
||||||
fmt.Println(s.Subscribers[conn])
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set
|
|
||||||
// if request.Set != nil {
|
|
||||||
// for _, set := range *request.Set {
|
|
||||||
// err = s.Unsubscribe(unsub, conn)
|
|
||||||
// if err != nil {
|
|
||||||
// fmt.Println(err)
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user