add files

This commit is contained in:
Smile Rex
2026-03-03 20:01:11 +03:00
commit 7d44a07996
5 changed files with 180 additions and 0 deletions

77
main.go Normal file
View File

@@ -0,0 +1,77 @@
package main
import (
"crypto/tls"
"log"
"log/slog"
"net/http"
"github.com/okdaichi/gomoqt/moqt"
"github.com/okdaichi/gomoqt/quic"
)
func main() {
// 🔐 Загружаем mkcert сертификат
cert, err := tls.LoadX509KeyPair("localhost+3.pem", "localhost+3-key.pem")
if err != nil {
log.Fatalf("failed to load server cert and key: %v", err)
}
tlsConfig := &tls.Config{
Certificates: []tls.Certificate{cert},
NextProtos: []string{"h3"}, // обязательно для HTTP/3
}
// 🚀 MoQ сервер
server := moqt.Server{
Addr: ":8080",
TLSConfig: tlsConfig,
QUICConfig: &quic.Config{
Allow0RTT: true,
EnableDatagrams: true,
},
}
path := "/relay"
// 🌐 WebTransport endpoint
http.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
slog.Info("Incoming WebTransport request")
err := server.HandleWebTransport(w, r)
if err != nil {
slog.Error("WebTransport error", "error", err)
}
})
// 📡 MoQ setup handler
moqt.HandleFunc(path, func(w moqt.SetupResponseWriter, r *moqt.SetupRequest) {
slog.Info("MoQ setup request received")
sess, err := moqt.Accept(w, r, nil)
if err != nil {
slog.Error("Failed to accept session", "error", err)
return
}
slog.Info("MoQ session established", "remote", sess.RemoteAddr())
// ⚠️ НЕ блокируем поток!
go handleSession(sess)
})
slog.Info("Server starting on https://localhost:8080")
if err := server.ListenAndServe(); err != nil {
slog.Error("Server failed", "error", err)
}
}
func handleSession(sess *moqt.Session) {
defer sess.Context().Done()
for {
// Ждём закрытия соединения
select {}
}
}