diff --git a/bot/basic/info.go b/bot/basic/info.go index 63e888a..8248f83 100644 --- a/bot/basic/info.go +++ b/bot/basic/info.go @@ -76,6 +76,8 @@ func (p *Player) handleLoginPacket(packet pk.Packet) error { if err != nil { return Error{err} } + + p.resetKeepAliveDeadline() return nil } diff --git a/bot/basic/keepalive.go b/bot/basic/keepalive.go index 040385b..306b73f 100644 --- a/bot/basic/keepalive.go +++ b/bot/basic/keepalive.go @@ -1,15 +1,27 @@ package basic import ( + "time" + "github.com/Tnze/go-mc/data/packetid" pk "github.com/Tnze/go-mc/net/packet" ) +const keepAliveDuration = time.Second * 20 + +func (p *Player) resetKeepAliveDeadline() { + newDeadline := time.Now().Add(keepAliveDuration) + p.c.Conn.Socket.SetDeadline(newDeadline) +} + func (p *Player) handleKeepAlivePacket(packet pk.Packet) error { var KeepAliveID pk.Long if err := packet.Scan(&KeepAliveID); err != nil { return Error{err} } + + p.resetKeepAliveDeadline() + // Response err := p.c.Conn.WritePacket(pk.Packet{ ID: int32(packetid.ServerboundKeepAlive), diff --git a/bot/client.go b/bot/client.go index 4a70d36..d62e2b9 100644 --- a/bot/client.go +++ b/bot/client.go @@ -44,14 +44,14 @@ func NewClient() *Client { // Conn is a concurrently-safe warpper of net.Conn with packet queue. // Note that not all methods are concurrently-safe. type Conn struct { - conn *net.Conn + *net.Conn send, recv queue.Queue[pk.Packet] rerr error } func warpConn(c *net.Conn) *Conn { wc := Conn{ - conn: c, + Conn: c, send: make(queue.ChannelQueue[pk.Packet], 256), recv: make(queue.ChannelQueue[pk.Packet], 256), rerr: nil, @@ -104,7 +104,7 @@ func (c *Conn) WritePacket(p pk.Packet) error { func (c *Conn) Close() error { c.send.Close() - return c.conn.Close() + return c.Conn.Close() } // Position is a 3D vector.