Some checks failed
build-docker-imge / Build the docker container (push) Failing after 2m24s
84 lines
2.0 KiB
Go
84 lines
2.0 KiB
Go
package router
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.kocoder.xyz/kocoded/szuntis-backend/middleware"
|
|
"github.com/gofiber/contrib/websocket"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type WebSocketRouter struct {
|
|
}
|
|
|
|
func NewWebSocketRouter(authMiddleware middleware.WsMiddleware, ws fiber.Router) error {
|
|
router := &WebSocketRouter{}
|
|
go RunHub()
|
|
ws.Get("/", func(c *fiber.Ctx) error {
|
|
return c.SendFile("/home/kocoder/szuntis-viel-zu-fiel/szuntis-backend/router/home.html", true)
|
|
})
|
|
ws.Get("/ws", authMiddleware.IsWebscoketUpgrade, websocket.New(router.Upgrade))
|
|
return nil
|
|
}
|
|
|
|
type Client struct{}
|
|
|
|
var Clients = make(map[*websocket.Conn]Client)
|
|
var Register = make(chan *websocket.Conn)
|
|
var Broadcast = make(chan string)
|
|
var Unregister = make(chan *websocket.Conn)
|
|
|
|
func RunHub() {
|
|
for {
|
|
select {
|
|
case conn := <-Register:
|
|
Clients[conn] = Client{}
|
|
fmt.Println("Connection registered")
|
|
case message := <-Broadcast:
|
|
fmt.Println("Recieved BC request: " + message)
|
|
for connection := range Clients {
|
|
if err := connection.WriteMessage(websocket.TextMessage, []byte(message)); err != nil {
|
|
fmt.Println("Write error: ", err)
|
|
|
|
Unregister <- connection
|
|
connection.WriteMessage(websocket.CloseMessage, []byte{})
|
|
connection.Close()
|
|
}
|
|
}
|
|
case connection := <-Unregister:
|
|
delete(Clients, connection)
|
|
fmt.Println("Unregistered Connection")
|
|
}
|
|
}
|
|
}
|
|
|
|
func (ws WebSocketRouter) Upgrade(c *websocket.Conn) {
|
|
defer func() {
|
|
fmt.Println(1)
|
|
Unregister <- c
|
|
c.Close()
|
|
}()
|
|
|
|
fmt.Println(2)
|
|
Register <- c
|
|
fmt.Println(12)
|
|
|
|
for {
|
|
messageType, message, err := c.ReadMessage()
|
|
if err != nil {
|
|
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
|
|
fmt.Println("Read error: ", err)
|
|
}
|
|
fmt.Println("ASDF")
|
|
return //Call defered function to close the connection
|
|
}
|
|
|
|
if messageType == websocket.TextMessage {
|
|
fmt.Println("Messgae", string(message))
|
|
Broadcast <- string(message)
|
|
} else {
|
|
fmt.Println("Websocket message received of type: ", messageType)
|
|
}
|
|
}
|
|
}
|