fixes for config in 1.21.11
This commit is contained in:
+16
-2
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user