more explicit asyncPackets switch

This commit is contained in:
adman
2026-04-04 19:32:46 +02:00
parent fbc3693219
commit ca74a3c3d4
2 changed files with 17 additions and 3 deletions
+1 -1
View File
@@ -125,7 +125,7 @@ func (l *Loop) RegisterCustomType(eventType reflect.Type, hv reflect.Value) {
v := hv.Call([]reflect.Value{reflect.ValueOf(packet)})[0] v := hv.Call([]reflect.Value{reflect.ValueOf(packet)})[0]
if !v.IsNil() { if !v.IsNil() {
err := v.Interface().(error) err := v.Interface().(error)
if errors.Is(err, HandlerDoneErr{}) || errors.Is(err, DontForwardErr) { if errors.As(err, &HandlerDoneErr{}) || errors.Is(err, DontForwardErr) {
return err return err
} }
slog.Error("handler failed", "err", err) slog.Error("handler failed", "err", err)
+16 -2
View File
@@ -65,6 +65,9 @@ type Conn struct {
Version string Version string
ProtocolVersion int32 ProtocolVersion int32
DebugPrintPackets []string DebugPrintPackets []string
asyncPackets bool
asyncPacketsMutex sync.RWMutex
} }
func (c *Conn) StartConn() (err error) { func (c *Conn) StartConn() (err error) {
@@ -96,6 +99,18 @@ func (c *Conn) State() proto_base.State {
return c.state return c.state
} }
func (c *Conn) SetAsyncPackets(asyncPackets bool) {
c.asyncPacketsMutex.Lock()
defer c.asyncPacketsMutex.Unlock()
c.asyncPackets = asyncPackets
}
func (c *Conn) GetAsyncPackets() bool {
c.asyncPacketsMutex.RLock()
defer c.asyncPacketsMutex.RUnlock()
return c.asyncPackets
}
func (c *Conn) SetVersion(version string) (err error) { func (c *Conn) SetVersion(version string) (err error) {
versionData, err := data.LookUpVersionByName(version) versionData, err := data.LookUpVersionByName(version)
if err != nil { if err != nil {
@@ -120,7 +135,6 @@ func (c *Conn) SetProtocolVersion(version int32) (err error) {
// It ensures that the receive-routine is only started once and creates a buffered channel for packet handling. // It ensures that the receive-routine is only started once and creates a buffered channel for packet handling.
func (c *Conn) ActivateReceiveRoutine() (chSending <-chan any) { func (c *Conn) ActivateReceiveRoutine() (chSending <-chan any) {
// This expects you to start a new routine when switching into play state // This expects you to start a new routine when switching into play state
spamLoginTick := c.State() != proto_base.Play
ch := make(chan any, BufferNPackets) ch := make(chan any, BufferNPackets)
go func() { go func() {
ctx := c.Ctx // this prevents c.Ctx being reassigned ctx := c.Ctx // this prevents c.Ctx being reassigned
@@ -129,7 +143,7 @@ func (c *Conn) ActivateReceiveRoutine() (chSending <-chan any) {
case <-ctx.Done(): case <-ctx.Done():
return return
default: default:
if spamLoginTick { if !c.GetAsyncPackets() {
ch <- LoginTick{} ch <- LoginTick{}
} else { } else {
packet, err := c.Receive() packet, err := c.Receive()