49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.konjactw.dev/falloutBot/go-mc/data/packetid"
|
|
pk "git.konjactw.dev/falloutBot/go-mc/net/packet"
|
|
|
|
"git.konjactw.dev/patyhank/minego/pkg/protocol/packet/game/client"
|
|
)
|
|
|
|
func newPacketHandler() *packetHandler {
|
|
return &packetHandler{
|
|
handlerMap: make(map[packetid.ClientboundPacketID][]func(ctx context.Context, p client.ClientboundPacket)),
|
|
rawMap: make(map[packetid.ClientboundPacketID][]func(ctx context.Context, p pk.Packet)),
|
|
}
|
|
}
|
|
|
|
type packetHandler struct {
|
|
handlerMap map[packetid.ClientboundPacketID][]func(ctx context.Context, p client.ClientboundPacket)
|
|
genericMap []func(ctx context.Context, p client.ClientboundPacket)
|
|
rawMap map[packetid.ClientboundPacketID][]func(ctx context.Context, p pk.Packet)
|
|
}
|
|
|
|
func (ph *packetHandler) AddPacketHandler(id packetid.ClientboundPacketID, handler func(ctx context.Context, p client.ClientboundPacket)) {
|
|
f := ph.handlerMap[id]
|
|
f = append(f, handler)
|
|
ph.handlerMap[id] = f
|
|
}
|
|
|
|
func (ph *packetHandler) AddGenericPacketHandler(handler func(ctx context.Context, p client.ClientboundPacket)) {
|
|
ph.genericMap = append(ph.genericMap, handler)
|
|
}
|
|
|
|
func (ph *packetHandler) AddRawPacketHandler(id packetid.ClientboundPacketID, handler func(ctx context.Context, p pk.Packet)) {
|
|
ph.rawMap[id] = append(ph.rawMap[id], handler)
|
|
}
|
|
|
|
func (ph *packetHandler) HandlePacket(ctx context.Context, p client.ClientboundPacket) {
|
|
f := ph.handlerMap[p.PacketID()]
|
|
for _, handler := range f {
|
|
handler(ctx, p)
|
|
}
|
|
|
|
for _, handler := range ph.genericMap {
|
|
handler(ctx, p)
|
|
}
|
|
}
|