more explicit asyncPackets switch
This commit is contained in:
+1
-1
@@ -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
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user