diff --git a/internal/wyoming/wyoming.go b/internal/wyoming/wyoming.go index 41ae27c3..af5cd65d 100644 --- a/internal/wyoming/wyoming.go +++ b/internal/wyoming/wyoming.go @@ -33,17 +33,11 @@ func Init() { continue } - ln, err := net.Listen("tcp", cfg.Listen) - if err != nil { - log.Warn().Msgf("[wyoming] listen error: %s", err) - continue - } - if cfg.Name == "" { cfg.Name = name } - srv := wyoming.Server{ + srv := &wyoming.Server{ Name: cfg.Name, VADThreshold: int16(1000 * cfg.VADThreshold), // 1.0 => 1000 WakeURI: cfg.WakeURI, @@ -62,9 +56,40 @@ func Init() { SndHandler: func(prod core.Producer) error { return stream.Play(prod) }, + Trace: func(format string, v ...any) { + log.Trace().Msgf("[wyoming] "+format, v...) + }, } - go srv.Serve(ln) + go serve(srv, cfg.Listen) } } var log zerolog.Logger + +func serve(srv *wyoming.Server, address string) { + ln, err := net.Listen("tcp", address) + if err != nil { + log.Warn().Msgf("[wyoming] listen error: %s", err) + } + + for { + conn, err := ln.Accept() + if err != nil { + return + } + + go handle(srv, conn) + } +} + +func handle(srv *wyoming.Server, conn net.Conn) { + addr := conn.RemoteAddr() + + log.Trace().Msgf("[wyoming] %s connected", addr) + + if err := srv.Handle(conn); err != nil { + log.Error().Msgf("[wyoming] %s error: %s", addr, err) + } + + log.Trace().Msgf("[wyoming] %s disconnected", addr) +} diff --git a/pkg/wyoming/satellite.go b/pkg/wyoming/satellite.go index 14bded32..bab3c761 100644 --- a/pkg/wyoming/satellite.go +++ b/pkg/wyoming/satellite.go @@ -21,6 +21,8 @@ type Server struct { MicHandler func(cons core.Consumer) error SndHandler func(prod core.Producer) error + + Trace func(format string, v ...any) } func (s *Server) Serve(l net.Listener) error { @@ -39,8 +41,6 @@ func (s *Server) Handle(conn net.Conn) error { sat := newSatellite(api, s) defer sat.Close() - //log.Debug().Msgf("[wyoming] new client: %s", conn.RemoteAddr()) - var snd []byte for { @@ -49,7 +49,7 @@ func (s *Server) Handle(conn net.Conn) error { return err } - //log.Printf("%s %s %d", evt.Type, evt.Data, len(evt.Payload)) + s.Trace("event: %s data: %s payload: %d", evt.Type, evt.Data, len(evt.Payload)) switch evt.Type { case "ping": // {"text": null}