From 0fc4453bf64bbb5a86fc9ff1efda5775289a9bbd Mon Sep 17 00:00:00 2001 From: Tnze Date: Thu, 23 Dec 2021 01:26:55 +0800 Subject: [PATCH] KeepAlive error handling --- server/keepalive.go | 10 ++++++++-- server/player.go | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/server/keepalive.go b/server/keepalive.go index b9fafa3..753e528 100644 --- a/server/keepalive.go +++ b/server/keepalive.go @@ -3,6 +3,7 @@ package server import ( "container/list" "context" + "errors" "time" "github.com/Tnze/go-mc/data/packetid" @@ -121,10 +122,14 @@ func (k *KeepAlive) pingPlayer(now time.Time) { if elem := k.pingList.Front(); elem != nil { player := elem.Value.(keepAliveItem).player // Send Clientbound KeepAlive packet. - player.WritePacket(Packet757(pk.Marshal( + err := player.WritePacket(Packet757(pk.Marshal( packetid.ClientboundKeepAlive, pk.Long(k.keepAliveID), ))) + if err != nil { + player.PutErr(err) + return + } k.keepAliveID++ // Clientbound KeepAlive packet is sent, move the player to waiting list. k.pingList.Remove(elem) @@ -148,7 +153,8 @@ func (k *KeepAlive) tickPlayer(p *Player) { } if elem == nil { - panic("keepalive: fail to tick player: " + p.UUID.String() + " not found") + p.PutErr(errors.New("keepalive: fail to tick player: " + p.UUID.String() + " not found")) + return } if elem.Prev() == nil { diff --git a/server/player.go b/server/player.go index 3ee701a..6a77565 100644 --- a/server/player.go +++ b/server/player.go @@ -38,8 +38,13 @@ type PacketHandler struct { type packetHandlerFunc func(packet Packet757) error func (p *Player) Add(ph PacketHandler) { + if p.handlers == nil { p.handlers = make(map[int32][]packetHandlerFunc) } p.handlers[ph.ID] = append(p.handlers[ph.ID], ph.F) } + +func (p *Player) PutErr(err error) { + // TODO: handle errors +}