mirror of https://github.com/gorilla/websocket
Mirror of https://github.com/gorilla/websocket
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
913 B
42 lines
913 B
// Copyright 2019 The Gorilla WebSocket Authors. All rights reserved. |
|
// Use of this source code is governed by a BSD-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package websocket |
|
|
|
import ( |
|
"io" |
|
"strings" |
|
) |
|
|
|
// JoinMessages concatenates received messages to create a single io.Reader. |
|
// The string term is appended to each message. The returned reader does not |
|
// support concurrent calls to the Read method. |
|
func JoinMessages(c *Conn, term string) io.Reader { |
|
return &joinReader{c: c, term: term} |
|
} |
|
|
|
type joinReader struct { |
|
c *Conn |
|
term string |
|
r io.Reader |
|
} |
|
|
|
func (r *joinReader) Read(p []byte) (int, error) { |
|
if r.r == nil { |
|
var err error |
|
_, r.r, err = r.c.NextReader() |
|
if err != nil { |
|
return 0, err |
|
} |
|
if r.term != "" { |
|
r.r = io.MultiReader(r.r, strings.NewReader(r.term)) |
|
} |
|
} |
|
n, err := r.r.Read(p) |
|
if err == io.EOF { |
|
err = nil |
|
r.r = nil |
|
} |
|
return n, err |
|
}
|
|
|