Files
tma-back/controllers/hub.go
Smile Rex d3a19d5066 new files
2026-01-14 11:34:03 +03:00

77 lines
1.2 KiB
Go

package controllers
import (
"bytes"
"encoding/binary"
"log"
"net/http"
"server/models"
"github.com/gorilla/websocket"
)
type Hub struct {
Players map[uint32]*models.Player
ServerBuffer []byte
}
func NewHub() *Hub {
return &Hub{
Players: make(map[uint32]*models.Player),
}
}
func (h *Hub) readLoop(conn *websocket.Conn) {
p := &models.Player{
Conn: conn,
InputX: 0,
InputZ: 0,
}
log.Println("Player connected:", p.ID)
h.Players[p.ID] = p
defer func() {
delete(h.Players, p.ID)
p.Conn.Close()
log.Println("Player disconnected:", p.ID)
}()
for {
_, data, err := p.Conn.ReadMessage()
if err != nil {
return
}
if len(data) < 8 {
continue
}
buf := bytes.NewReader(data)
binary.Read(buf, binary.LittleEndian, &p.InputX)
binary.Read(buf, binary.LittleEndian, &p.InputZ)
}
}
func (h *Hub) StartWS(w http.ResponseWriter, r *http.Request) {
upgrader := websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool { return true },
}
for {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
continue
}
go h.readLoop(conn)
}
}
func (h *Hub) Start() {
http.HandleFunc("/ws", h.StartWS)
log.Fatal(http.ListenAndServe(":8080", nil))
}