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

@@ -10,52 +10,61 @@ import (
"github.com/aler9/gortsplib/pkg/base"
)
type serverConnHandler struct {
}
func handleConn(conn *gortsplib.ServerConn) {
onRequest := func(req *base.Request) (*base.Response, error) {
switch req.Method {
case base.Options:
return &base.Response{
StatusCode: base.StatusOK,
Header: base.Header{
"Public": base.HeaderValue{strings.Join([]string{
string(base.Describe),
string(base.Announce),
string(base.Setup),
string(base.Play),
string(base.Record),
string(base.Pause),
string(base.Teardown),
}, ", ")},
},
}, nil
func (sc *serverConnHandler) OnClose(err error) {
}
case base.Teardown:
return &base.Response{
StatusCode: base.StatusOK,
Header: base.Header{},
}, fmt.Errorf("terminated")
}
func (sc *serverConnHandler) OnRequest(req *base.Request) (*base.Response, error) {
switch req.Method {
case base.Options:
return &base.Response{
StatusCode: base.StatusOK,
Header: base.Header{
"Public": base.HeaderValue{strings.Join([]string{
string(base.Describe),
string(base.Announce),
string(base.Setup),
string(base.Play),
string(base.Record),
string(base.Pause),
string(base.Teardown),
}, ", ")},
},
}, nil
case base.Teardown:
return &base.Response{
StatusCode: base.StatusOK,
StatusCode: base.StatusBadRequest,
Header: base.Header{},
}, fmt.Errorf("terminated")
}, fmt.Errorf("unhandled method: %v", req.Method)
}
return &base.Response{
StatusCode: base.StatusBadRequest,
Header: base.Header{},
}, fmt.Errorf("unhandled method: %v", req.Method)
}
onFrame := func(id int, typ gortsplib.StreamType, buf []byte) {
}
func (sc *serverConnHandler) OnFrame(id int, typ gortsplib.StreamType, buf []byte) {
done := conn.Read(onRequest, onFrame)
err := <-done
panic(err)
}
func main() {
// create server
gortsplib.Serve(":8554", func(c *gortsplib.ServerConn) gortsplib.ServerConnHandler {
return &serverConnHandler{}
})
s, err := gortsplib.Serve(":8554")
if err != nil {
panic(err)
}
// wait forever
select {}
// accept connections
for {
conn, err := s.Accept()
if err != nil {
panic(err)
}
go handleConn(conn)
}
}