diff --git a/server/keepalive.go b/server/keepalive.go index cca4bdd..d542b7e 100644 --- a/server/keepalive.go +++ b/server/keepalive.go @@ -32,7 +32,7 @@ type KeepAlive struct { keepAliveID int64 //onPlayerExpire func(p *Player) - //updatePlayerDelay func(p *Player, delay time.Duration) + updatePlayerDelay func(p *Player, delay time.Duration) } func NewKeepAlive() (k *KeepAlive) { @@ -49,6 +49,14 @@ func NewKeepAlive() (k *KeepAlive) { } } +func (k *KeepAlive) AddPlayerDelayUpdateHandler(f func(p *Player, delay time.Duration)) *KeepAlive { + if k.updatePlayerDelay != nil { + panic("add player update handler twice") + } + k.updatePlayerDelay = f + return k +} + // Init implement Component for KeepAlive func (k *KeepAlive) Init(g *Game) { g.AddHandler(&PacketHandler{ @@ -145,9 +153,11 @@ func (k *KeepAlive) tickPlayer(p *Player) { defer keepAliveSetTimer(k.waitList, k.waitTimer, keepAliveWaitInterval) } // update delay of player - //t := k.waitList.Remove(elem).(keepAliveItem).t + t := k.waitList.Remove(elem).(keepAliveItem).t now := time.Now() - //k.updatePlayerDelay(p, now.Sub(t)) + if k.updatePlayerDelay != nil { + k.updatePlayerDelay(p, now.Sub(t)) + } // move the player to ping list k.listIndex[p.UUID] = k.pingList.PushBack( keepAliveItem{player: p, t: now},