kick players when keepalive timeout
This commit is contained in:
@ -14,7 +14,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
const MaxPlayer = 1024
|
const MaxPlayer = 16384
|
||||||
const IconPath = "./server-icon.png"
|
const IconPath = "./server-icon.png"
|
||||||
|
|
||||||
var motd = chat.Message{Text: "A Minecraft Server ", Extra: []chat.Message{{Text: "Powered by go-mc", Color: "yellow"}}}
|
var motd = chat.Message{Text: "A Minecraft Server ", Extra: []chat.Message{{Text: "Powered by go-mc", Color: "yellow"}}}
|
||||||
|
@ -28,6 +28,7 @@ func main() {
|
|||||||
time.Sleep(time.Second * 3)
|
time.Sleep(time.Second * 3)
|
||||||
}
|
}
|
||||||
}(i)
|
}(i)
|
||||||
|
time.Sleep(time.Millisecond)
|
||||||
}
|
}
|
||||||
select {}
|
select {}
|
||||||
}
|
}
|
||||||
@ -46,7 +47,6 @@ func newIndividual(id int, name string) (i *individual) {
|
|||||||
i.player = basic.NewPlayer(i.client, basic.DefaultSettings)
|
i.player = basic.NewPlayer(i.client, basic.DefaultSettings)
|
||||||
basic.EventsListener{
|
basic.EventsListener{
|
||||||
GameStart: i.onGameStart,
|
GameStart: i.onGameStart,
|
||||||
Death: i.onDeath,
|
|
||||||
Disconnect: onDisconnect,
|
Disconnect: onDisconnect,
|
||||||
}.Attach(i.client)
|
}.Attach(i.client)
|
||||||
return
|
return
|
||||||
@ -68,19 +68,6 @@ func (i *individual) run(address string) {
|
|||||||
log.Printf("[%d] Handle game error: %v", i.id, err)
|
log.Printf("[%d] Handle game error: %v", i.id, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *individual) onDeath() error {
|
|
||||||
log.Printf("[%d]Died and Respawned", i.id)
|
|
||||||
// If we exclude Respawn(...) then the player won't press the "Respawn" button upon death
|
|
||||||
go func() {
|
|
||||||
time.Sleep(time.Second * 5)
|
|
||||||
err := i.player.Respawn()
|
|
||||||
if err != nil {
|
|
||||||
log.Print(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i *individual) onGameStart() error {
|
func (i *individual) onGameStart() error {
|
||||||
log.Printf("[%d]Game start", i.id)
|
log.Printf("[%d]Game start", i.id)
|
||||||
return nil
|
return nil
|
||||||
|
@ -131,6 +131,9 @@ func (g *Game) AcceptPlayer(name string, id uuid.UUID, protocol int32, conn *net
|
|||||||
if err := ph.F(p, Packet757(packet)); err != nil {
|
if err := ph.F(p, Packet757(packet)); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if err := p.GetErr(); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -156,9 +156,9 @@ func (k *KeepAlive) tickPlayer(p *Player) {
|
|||||||
|
|
||||||
func (k *KeepAlive) kickPlayer() {
|
func (k *KeepAlive) kickPlayer() {
|
||||||
if elem := k.waitList.Front(); elem != nil {
|
if elem := k.waitList.Front(); elem != nil {
|
||||||
//player := elem.Value.(keepAliveItem).player
|
player := k.waitList.Remove(elem).(keepAliveItem).player
|
||||||
k.waitList.Remove(elem)
|
k.waitList.Remove(elem)
|
||||||
//k.onPlayerExpire(player)
|
player.PutErr(errors.New("keepalive: client did not response"))
|
||||||
}
|
}
|
||||||
keepAliveSetTimer(k.waitList, k.waitTimer, keepAliveWaitInterval)
|
keepAliveSetTimer(k.waitList, k.waitTimer, keepAliveWaitInterval)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user