From 4e04de558181a5c7790ea8862eb2bc8a453a7791 Mon Sep 17 00:00:00 2001 From: Smile Rex Date: Thu, 22 Jan 2026 16:34:47 +0300 Subject: [PATCH] new arch --- main.go | 25 ++++++++++++++-------- protocol.go | 12 ----------- room.go => src/controllers/room.go | 14 ++++++------ telegram.go => src/controllers/telegram.go | 2 +- auth.go => src/models/auth.go | 2 +- player.go => src/models/player.go | 2 +- src/models/protocol.go | 19 ++++++++++++++++ 7 files changed, 45 insertions(+), 31 deletions(-) delete mode 100644 protocol.go rename room.go => src/controllers/room.go (82%) rename telegram.go => src/controllers/telegram.go (94%) rename auth.go => src/models/auth.go (86%) rename player.go => src/models/player.go (91%) create mode 100644 src/models/protocol.go diff --git a/main.go b/main.go index f302ef7..acff585 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,8 @@ import ( "fmt" "log" "net/http" + "server/src/controllers" + "server/src/models" "github.com/gorilla/websocket" ) @@ -12,19 +14,19 @@ var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, } -func ServeWS(room *Room, w http.ResponseWriter, r *http.Request) { +func ServeWS(room *controllers.Room, w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { return } - var auth AuthMessage + var auth models.AuthMessage if err := conn.ReadJSON(&auth); err != nil || auth.Type != "auth" { conn.Close() return } - data, err := VerifyTelegramInitData(auth.InitData, "7697757472:AAESD9HfkWwbIZe-HXR7IazUShr69hZTLmE") + data, err := controllers.VerifyTelegramInitData(auth.InitData, "7697757472:AAESD9HfkWwbIZe-HXR7IazUShr69hZTLmE") if err != nil { conn.Close() return @@ -39,7 +41,7 @@ func ServeWS(room *Room, w http.ResponseWriter, r *http.Request) { log.Printf("Player %d connected!", userID) - player := &Player{ + player := &models.Player{ ID: userID, Username: username, Conn: conn, @@ -59,26 +61,31 @@ func ServeWS(room *Room, w http.ResponseWriter, r *http.Request) { go readLoop(room, player) } -func readLoop(room *Room, player *Player) { +func readLoop(room *controllers.Room, player *models.Player) { defer func() { delete(room.Players, player.ID) player.Conn.Close() }() for { - var msg InputMessage + var msg models.StateMessage err := player.Conn.ReadJSON(&msg) if err != nil { return } - msg.PlayerID = player.ID - room.Input <- msg + switch msg.Type { + case models.InputMsgType: + var input models.InputMessage = msg.Payload.(models.InputMessage) + player.X = input.DX + player.Y = input.DY + room.Input <- input + } } } func main() { - room := NewRoom() + room := controllers.NewRoom() go room.Run() diff --git a/protocol.go b/protocol.go deleted file mode 100644 index cf3754e..0000000 --- a/protocol.go +++ /dev/null @@ -1,12 +0,0 @@ -package main - -type InputMessage struct { - PlayerID int64 - DX float64 `json:"dx"` - DY float64 `json:"dy"` -} - -type StateMessage struct { - Type string `json:"type"` - Payload any `json:"payload"` -} diff --git a/room.go b/src/controllers/room.go similarity index 82% rename from room.go rename to src/controllers/room.go index 750aa78..f529776 100644 --- a/room.go +++ b/src/controllers/room.go @@ -1,25 +1,25 @@ -package main +package controllers import ( + "server/src/models" "sync" "time" ) type Room struct { - Players map[int64]*Player - Input chan InputMessage + Players map[int64]*models.Player + Input chan models.InputMessage mu sync.Mutex } func NewRoom() *Room { return &Room{ - Players: make(map[int64]*Player), - Input: make(chan InputMessage, 128), + Players: make(map[int64]*models.Player), + Input: make(chan models.InputMessage, 128), } } func (r *Room) update() { - // 1️⃣ обрабатываем input for { select { case input := <-r.Input: @@ -59,7 +59,7 @@ func (r *Room) broadcast() { r.mu.Unlock() - msg := StateMessage{ + msg := models.StateMessage{ Type: "state", Payload: map[string]any{ "players": state, diff --git a/telegram.go b/src/controllers/telegram.go similarity index 94% rename from telegram.go rename to src/controllers/telegram.go index 70519b6..1fe90d2 100644 --- a/telegram.go +++ b/src/controllers/telegram.go @@ -1,4 +1,4 @@ -package main +package controllers import ( "time" diff --git a/auth.go b/src/models/auth.go similarity index 86% rename from auth.go rename to src/models/auth.go index b51c5d7..f287a64 100644 --- a/auth.go +++ b/src/models/auth.go @@ -1,4 +1,4 @@ -package main +package models type AuthMessage struct { Type string `json:"type"` diff --git a/player.go b/src/models/player.go similarity index 91% rename from player.go rename to src/models/player.go index cba4030..d0003f9 100644 --- a/player.go +++ b/src/models/player.go @@ -1,4 +1,4 @@ -package main +package models import ( "github.com/gorilla/websocket" diff --git a/src/models/protocol.go b/src/models/protocol.go new file mode 100644 index 0000000..4051db5 --- /dev/null +++ b/src/models/protocol.go @@ -0,0 +1,19 @@ +package models + +type MsgType string + +const ( + InputMsgType MsgType = "input" + ChatMsgType MsgType = "chat" +) + +type InputMessage struct { + PlayerID int64 + DX float64 `json:"dx"` + DY float64 `json:"dy"` +} + +type StateMessage struct { + Type MsgType `json:"type"` + Payload any `json:"payload"` +}