From 99031596efbcf004188217d2a9e53ac5ce33b511 Mon Sep 17 00:00:00 2001 From: xegineering Date: Thu, 28 Nov 2024 22:44:28 +0100 Subject: Replace custom code by io package functions This makes use of two functions from this package: - io.Copy() - io.MultiWriter() `io.Copy()` is used to move the data from whatever reader is provided. `io.Multiwriter()` solves the issue that we need to stream to multiple network connections at the same time (one for each soundbox). --- soundbox/streaming.go | 27 ++++++++------------------- soundbox/url.go | 2 +- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/soundbox/streaming.go b/soundbox/streaming.go index 2686f47..1a2d89e 100644 --- a/soundbox/streaming.go +++ b/soundbox/streaming.go @@ -2,7 +2,6 @@ package soundbox import ( "context" - "errors" "io" "net" "time" @@ -27,24 +26,14 @@ func streamContext(ctx context.Context, r io.Reader, targets []net.HardwareAddr) } }() - for { - buffer := make([]byte, bufferSize) - i, readErr := r.Read(buffer) - for _, conn := range conns { - conn.SetDeadline(time.Now().Add(writeTimeout)) - _, writeErr := conn.Write(buffer[:i]) - if writeErr != nil { - return writeErr - } - } - if readErr != nil { - if errors.Is(readErr, io.EOF) { - break - } else { - return readErr - } - } + writers := make([]io.Writer, 0) + for _, conn := range conns { + writers = append(writers, conn) } - return nil + mw := io.MultiWriter(writers...) + + _, err := io.Copy(mw, r) + + return err } diff --git a/soundbox/url.go b/soundbox/url.go index 6fed442..b24b05d 100644 --- a/soundbox/url.go +++ b/soundbox/url.go @@ -33,7 +33,7 @@ func StreamURLContext(ctx context.Context, url string, targets []net.HardwareAdd return err } - streamContext(ctx, stdout, targets) + _ = streamContext(ctx, stdout, targets) return cmd.Wait() } -- cgit v1.2.3-70-g09d2