fixes for config in 1.21.11

This commit is contained in:
Admin Else
2026-03-31 16:51:07 +02:00
parent f749d3bfc5
commit 958102e43c
9 changed files with 91 additions and 28 deletions
+16 -2
View File
@@ -37,6 +37,7 @@ var (
type LoginTick struct{}
var LatestVersion = proto_generated.SupportedVersions[len(proto_generated.SupportedVersions)-1]
var EarliestVersion = proto_generated.SupportedVersions[len(proto_generated.SupportedVersions)-1]
// UnCodablePacket represents a packet that could not be decoded.
type UnCodablePacket struct {
@@ -230,7 +231,8 @@ func (c *Conn) Receive() (packet proto_base.EncodeDecodeAble, err error) {
packet = reflect.New(reflect.TypeOf(i.Type).Elem()).Interface().(proto_base.EncodeDecodeAble)
debugPrint := slog.Default().Enabled(context.Background(), slog.LevelDebug) &&
slices.ContainsFunc(c.DebugPrintPackets, func(s string) bool { return strings.Contains(i.Name, s) })
if !c.IsTypeRegistered(reflect.TypeOf(packet)) && !debugPrint {
isListenerRegistered := c.IsTypeRegistered(reflect.TypeOf(packet))
if !isListenerRegistered && !debugPrint {
packet = &UnCodablePacket{Err: NoHandlerRegisteredErr, Data: packetBytes, Direction: c.Actor.ReceiveDirection()}
return
}
@@ -246,7 +248,19 @@ func (c *Conn) Receive() (packet proto_base.EncodeDecodeAble, err error) {
return
}
if debugPrint {
slog.Debug("recv", "packet", fmt.Sprintf("%#v", packet))
slog.Debug("recv", "packet", fmt.Sprintf("%#v", packet), "isListenerRegistered", isListenerRegistered)
}
return
}
func NewConn() (ret *Conn) {
ret = &Conn{}
ret.SetState(proto_base.Handshaking)
ret.SetCompressionThreshold(-1)
err := ret.SetVersion(EarliestVersion)
if err != nil {
panic(err)
}
ret.Loop = event.NewLoop()
return
}
+9
View File
@@ -73,3 +73,12 @@ func LookupPacketInfoByNameProtocolVersionAndState(name string, version int32, s
}
return
}
func LookupPacketInfoByNameProtocolVersionStateAndDirection(name string, version int32, state proto_base.State, direction proto_base.Direction) (p proto_base.PacketInfo, ok bool) {
for _, p := range proto_generated.Packets {
if state == p.State && p.Name == name && p.ProtocolVersion == version && p.Direction == direction {
return p, true
}
}
return
}
+6 -2
View File
@@ -88,7 +88,11 @@ func (c *Conn) RegisterCriticalUntil(h any, until string) {
func (c *Conn) registerUntil(h any, until string, critical bool) {
eventType, hv := event.ValidateHandler(h)
c.RegisterDirect(eventType, hv)
if critical {
c.RegisterDirect(eventType, hv)
} else {
c.RegisterCustomType(eventType, hv)
}
if !eventType.Implements(reflect.TypeFor[proto_base.EncodeDecodeAble]()) {
panic("expected method with argument that implements proto_base.EncodeDecodeAble")
}
@@ -109,7 +113,7 @@ func (c *Conn) registerUntil(h any, until string, critical bool) {
panic("protocol version not found")
}
var newPacketInfo proto_base.PacketInfo
newPacketInfo, found = LookupPacketInfoByNameProtocolVersionAndState(packetInfo.Name, versionInfo.Version, packetInfo.State)
newPacketInfo, found = LookupPacketInfoByNameProtocolVersionStateAndDirection(packetInfo.Name, versionInfo.Version, packetInfo.State, packetInfo.Direction)
if !found {
panic("packet not found")
}
+17
View File
@@ -5,6 +5,7 @@ import (
"testing"
"github.com/admin-else/strom/proto"
"github.com/admin-else/strom/proto_generated/v1_21_11"
"github.com/admin-else/strom/proto_generated/v1_21_8"
"github.com/admin-else/strom/proto_generated/v1_21_9"
)
@@ -29,3 +30,19 @@ func TestCanSmartConvertTags(t *testing.T) {
ret := proto.SmartConvert(reflect.ValueOf(packet), targetType)
t.Logf("%#v", ret)
}
func TestRegisterUntilLatest(t *testing.T) {
conn := proto.NewConn()
ok := false
conn.RegisterCriticalUntilLatest(func(p *v1_21_8.ConfigurationToServerPacketFinishConfiguration) error {
ok = true
return nil
})
err := conn.Fire(&v1_21_11.ConfigurationToServerPacketFinishConfiguration{})
if err != nil {
t.Errorf("fire failed err: %v", err)
}
if !ok {
t.Errorf("handler not called")
}
}