gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

join.go (913B)


      1 // Copyright 2019 The Gorilla WebSocket Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package websocket
      6 
      7 import (
      8 	"io"
      9 	"strings"
     10 )
     11 
     12 // JoinMessages concatenates received messages to create a single io.Reader.
     13 // The string term is appended to each message. The returned reader does not
     14 // support concurrent calls to the Read method.
     15 func JoinMessages(c *Conn, term string) io.Reader {
     16 	return &joinReader{c: c, term: term}
     17 }
     18 
     19 type joinReader struct {
     20 	c    *Conn
     21 	term string
     22 	r    io.Reader
     23 }
     24 
     25 func (r *joinReader) Read(p []byte) (int, error) {
     26 	if r.r == nil {
     27 		var err error
     28 		_, r.r, err = r.c.NextReader()
     29 		if err != nil {
     30 			return 0, err
     31 		}
     32 		if r.term != "" {
     33 			r.r = io.MultiReader(r.r, strings.NewReader(r.term))
     34 		}
     35 	}
     36 	n, err := r.r.Read(p)
     37 	if err == io.EOF {
     38 		err = nil
     39 		r.r = nil
     40 	}
     41 	return n, err
     42 }