handle bundle
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
package bot
|
package bot
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/Tnze/go-mc/data/packetid"
|
"github.com/Tnze/go-mc/data/packetid"
|
||||||
@ -17,6 +18,12 @@ func (c *Client) HandleGame() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if p.ID == int32(packetid.BundleDelimiter) {
|
||||||
|
err := c.handleBundlePackets()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
// handle packets
|
// handle packets
|
||||||
err := c.handlePacket(p)
|
err := c.handlePacket(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -27,6 +34,7 @@ func (c *Client) HandleGame() error {
|
|||||||
c.Conn.pool.Put(p.Data)
|
c.Conn.pool.Put(p.Data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type PacketHandlerError struct {
|
type PacketHandlerError struct {
|
||||||
ID packetid.ClientboundPacketID
|
ID packetid.ClientboundPacketID
|
||||||
@ -41,6 +49,33 @@ func (d PacketHandlerError) Unwrap() error {
|
|||||||
return d.Err
|
return d.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) handleBundlePackets() (err error) {
|
||||||
|
var packets []pk.Packet
|
||||||
|
for i := 0; i < 4096; i++ {
|
||||||
|
var p pk.Packet
|
||||||
|
// Read packets
|
||||||
|
if err := c.Conn.ReadPacket(&p); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if p.ID == int32(packetid.BundleDelimiter) {
|
||||||
|
// bundle finished
|
||||||
|
goto handlePackets
|
||||||
|
}
|
||||||
|
|
||||||
|
packets = append(packets, p)
|
||||||
|
}
|
||||||
|
return errors.New("packet number of a bundle out of limit")
|
||||||
|
|
||||||
|
handlePackets:
|
||||||
|
for i := range packets {
|
||||||
|
if err := c.handlePacket(packets[i]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) handlePacket(p pk.Packet) (err error) {
|
func (c *Client) handlePacket(p pk.Packet) (err error) {
|
||||||
packetID := packetid.ClientboundPacketID(p.ID)
|
packetID := packetid.ClientboundPacketID(p.ID)
|
||||||
for _, handler := range c.Events.generic {
|
for _, handler := range c.Events.generic {
|
||||||
|
Reference in New Issue
Block a user