new server structure

This commit is contained in:
aler9
2020-12-08 21:15:02 +01:00
parent 927511d81e
commit c7f6d77392
5 changed files with 118 additions and 133 deletions

View File

@@ -3,58 +3,30 @@ package gortsplib
import (
"bufio"
"net"
"sync"
"time"
)
// Server is a RTSP server.
type Server struct {
conf ServerConf
listener *net.TCPListener
handler func(sc *ServerConn) ServerConnHandler
wg sync.WaitGroup
}
// Close closes the server.
func (s *Server) Close() error {
s.listener.Close()
s.wg.Wait()
return nil
return s.listener.Close()
}
func (s *Server) run() {
defer s.wg.Done()
if s.conf.ReadTimeout == 0 {
s.conf.ReadTimeout = 10 * time.Second
}
if s.conf.WriteTimeout == 0 {
s.conf.WriteTimeout = 10 * time.Second
}
if s.conf.ReadBufferCount == 0 {
s.conf.ReadBufferCount = 1
// Accept accepts a connection.
func (s *Server) Accept() (*ServerConn, error) {
nconn, err := s.listener.Accept()
if err != nil {
return nil, err
}
for {
nconn, err := s.listener.Accept()
if err != nil {
break
}
sc := &ServerConn{
s: s,
nconn: nconn,
br: bufio.NewReaderSize(nconn, serverReadBufferSize),
bw: bufio.NewWriterSize(nconn, serverWriteBufferSize),
}
sc.connHandler = s.handler(sc)
if sc.connHandler == nil {
nconn.Close()
continue
}
s.wg.Add(1)
go sc.run()
}
return &ServerConn{
s: s,
nconn: nconn,
br: bufio.NewReaderSize(nconn, serverReadBufferSize),
bw: bufio.NewWriterSize(nconn, serverWriteBufferSize),
}, nil
}