mirror of https://github.com/docker/docs.git
41 lines
820 B
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
|
|
}
|
|
}
|
|
}
|
|
}
|