2021-08-27 09:59:27 -07:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net"
|
|
|
|
|
|
|
|
"github.com/anon55555/mt"
|
|
|
|
)
|
|
|
|
|
|
|
|
type listener struct {
|
|
|
|
mtListener mt.Listener
|
|
|
|
}
|
|
|
|
|
|
|
|
func listen(pc net.PacketConn) *listener {
|
|
|
|
return &listener{
|
|
|
|
mtListener: mt.Listen(pc),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (l *listener) close() error {
|
|
|
|
return l.mtListener.Close()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (l *listener) addr() net.Addr { return l.mtListener.Addr() }
|
|
|
|
|
|
|
|
func (l *listener) accept() (*clientConn, error) {
|
|
|
|
p, err := l.mtListener.Accept()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
cc := &clientConn{
|
|
|
|
Peer: p,
|
|
|
|
initCh: make(chan struct{}),
|
2021-09-01 04:27:53 -07:00
|
|
|
modChs: make(map[string]struct{}),
|
2021-08-27 09:59:27 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
cc.log("-->", "connect")
|
|
|
|
go handleClt(cc)
|
|
|
|
|
|
|
|
select {
|
|
|
|
case <-cc.Closed():
|
|
|
|
return nil, fmt.Errorf("%s is closed", cc.RemoteAddr())
|
|
|
|
default:
|
|
|
|
}
|
|
|
|
|
|
|
|
return cc, nil
|
|
|
|
}
|