Added events feature + rewrote router.go api/v1
This commit is contained in:
26
internal/events/events_controller.go
Normal file
26
internal/events/events_controller.go
Normal file
@ -0,0 +1,26 @@
|
||||
package events
|
||||
|
||||
import (
|
||||
"git.cesium.pw/niku/virteen/internal/events/services"
|
||||
"github.com/gofiber/contrib/websocket"
|
||||
)
|
||||
|
||||
type EventsController struct {
|
||||
events *services.EventsService
|
||||
}
|
||||
|
||||
func NewEventsController(events *services.EventsService) *EventsController {
|
||||
return &EventsController{events}
|
||||
}
|
||||
|
||||
func (ec *EventsController) PollEvents(ws *websocket.Conn) {
|
||||
(*ec.events).AddConnection(ws)
|
||||
defer (*ec.events).RemoveConnection(ws)
|
||||
|
||||
for {
|
||||
_, _, err := ws.ReadMessage()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
27
internal/events/services/events_service.go
Normal file
27
internal/events/services/events_service.go
Normal file
@ -0,0 +1,27 @@
|
||||
package services
|
||||
|
||||
import "github.com/gofiber/contrib/websocket"
|
||||
|
||||
type EventsService struct {
|
||||
clients map[*websocket.Conn]interface{}
|
||||
}
|
||||
|
||||
func NewEventsService() *EventsService {
|
||||
return &EventsService{
|
||||
clients: make(map[*websocket.Conn]interface{}),
|
||||
}
|
||||
}
|
||||
|
||||
func (es *EventsService) AddConnection(ws *websocket.Conn) {
|
||||
es.clients[ws] = nil
|
||||
}
|
||||
|
||||
func (es *EventsService) RemoveConnection(ws *websocket.Conn) {
|
||||
delete(es.clients, ws)
|
||||
}
|
||||
|
||||
func (es *EventsService) Broadcast(msg interface{}) {
|
||||
for connection := range es.clients {
|
||||
go connection.WriteJSON(msg)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user