docs/utils/stream.go

41 lines
820 B
Go

package utils
import (
"github.com/docker/libswarm"
"fmt"
"io"
)
func EncodeStream(sender libswarm.Sender, reader io.Reader, tag string) {
chunk := make([]byte, 4096)
for {
n, err := reader.Read(chunk)
if n > 0 {
sender.Send(&libswarm.Message{Verb: libswarm.Log, Args: []string{tag, string(chunk[0:n])}})
}
if err != nil {
message := fmt.Sprintf("Error reading from stream: %v", err)
sender.Send(&libswarm.Message{Verb: libswarm.Error, Args: []string{message}})
break
}
}
}
func DecodeStream(dst io.Writer, src libswarm.Receiver, tag string) error {
for {
msg, err := src.Receive(libswarm.Ret)
if err == io.EOF {
return nil
}
if err != nil {
return err
}
if tag == msg.Args[0] {
if _, err := dst.Write([]byte(msg.Args[1])); err != nil {
return err
}
}
}
}