36 lines
618 B
Go
36 lines
618 B
Go
package server
|
|
|
|
import (
|
|
"github.com/kercylan98/minotaur/utils/super"
|
|
"github.com/xtaci/kcp-go/v5"
|
|
"net"
|
|
"sync"
|
|
)
|
|
|
|
type listener struct {
|
|
srv *Server
|
|
once sync.Once
|
|
net.Listener
|
|
kcpListener *kcp.Listener
|
|
state chan<- error
|
|
}
|
|
|
|
func (l *listener) init() *listener {
|
|
l.srv.OnStartBeforeEvent()
|
|
return l
|
|
}
|
|
|
|
func (l *listener) Accept() (net.Conn, error) {
|
|
l.once.Do(func() {
|
|
super.TryWriteChannel(l.state, nil)
|
|
})
|
|
return l.Listener.Accept()
|
|
}
|
|
|
|
func (l *listener) AcceptKCP() (*kcp.UDPSession, error) {
|
|
l.once.Do(func() {
|
|
super.TryWriteChannel(l.state, nil)
|
|
})
|
|
return l.kcpListener.AcceptKCP()
|
|
}
|