...

Source file src/github.com/gorilla/websocket/join.go

Documentation: github.com/gorilla/websocket

     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  }
    43  

View as plain text