Private
Public Access
1
0

fix game
All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 8m13s

This commit is contained in:
Sebastian Unterschütz
2026-03-21 22:18:48 +01:00
parent f81ec70f96
commit ce092c8366
3 changed files with 34 additions and 5 deletions

View File

@@ -27,6 +27,8 @@ type wsConn struct {
// disconnectFromServer trennt die bestehende WebSocket-Verbindung sauber
func (g *Game) disconnectFromServer() {
// Generation erhöhen → alle noch laufenden Handler der alten Verbindung werden ignoriert
g.connGeneration++
if g.wsConn != nil {
g.wsConn.ws.Call("close")
g.wsConn = nil
@@ -53,8 +55,16 @@ func (g *Game) connectToServer() {
connected: false,
}
// Generation zum Zeitpunkt der Verbindung festhalten.
// Wenn disconnectFromServer() aufgerufen wird, erhöht sich g.connGeneration
// und alle Handler dieser alten Verbindung geben sofort nil zurück.
myGen := g.connGeneration
// OnOpen Handler
ws.Call("addEventListener", "open", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
if g.connGeneration != myGen {
return nil // veraltete Verbindung
}
log.Println("✅ WebSocket verbunden!")
conn.connected = true
g.connected = true
@@ -63,6 +73,9 @@ func (g *Game) connectToServer() {
// OnMessage Handler
ws.Call("addEventListener", "message", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
if g.connGeneration != myGen {
return nil // veraltete Verbindung Nachrichten ignorieren
}
if len(args) == 0 {
return nil
}
@@ -149,6 +162,9 @@ func (g *Game) connectToServer() {
// OnError Handler
ws.Call("addEventListener", "error", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
if g.connGeneration != myGen {
return nil // veraltete Verbindung
}
log.Println("❌ WebSocket Fehler!")
conn.connected = false
g.connected = false
@@ -157,6 +173,9 @@ func (g *Game) connectToServer() {
// OnClose Handler
ws.Call("addEventListener", "close", js.FuncOf(func(this js.Value, args []js.Value) interface{} {
if g.connGeneration != myGen {
return nil // veraltete Verbindung kein g.connected überschreiben
}
log.Println("🔌 WebSocket geschlossen")
conn.connected = false
g.connected = false