github.com/ronaksoft/rony@v0.16.26-0.20230807065236-1743dbfe6959/internal/gateway/tcp/util/wsutil.go (about)

     1  /*
     2  Package wsutil provides utilities for working with WebSocket protocol.
     3  
     4  Overview:
     5  
     6    // Read masked text message from peer and check utf8 encoding.
     7    header, err := ws.ReadHeader(conn)
     8    if err != nil {
     9  	  // handle err
    10    }
    11  
    12    // Prepare to read payload.
    13    r := io.LimitReader(conn, header.Length)
    14    r = wsutil.NewCipherReader(r, header.Mask)
    15    r = wsutil.NewUTF8Reader(r)
    16  
    17    payload, err := ioutil.ReadAll(r)
    18    if err != nil {
    19  	  // handle err
    20    }
    21  
    22  You could get the same behavior using just `wsutil.Reader`:
    23  
    24    r := wsutil.Reader{
    25  	  Source:    conn,
    26  	  CheckUTF8: true,
    27    }
    28  
    29    payload, err := ioutil.ReadAll(r)
    30    if err != nil {
    31  	  // handle err
    32    }
    33  
    34  Or even simplest:
    35  
    36    payload, err := wsutil.ReadClientText(conn)
    37    if err != nil {
    38  	  // handle err
    39    }
    40  
    41  Package is also exports tools for buffered writing:
    42  
    43    // Create buffered writer, that will buffer output bytes and send them as
    44    // 128-length fragments (with exception on large writes, see the doc).
    45    writer := wsutil.NewWriterSize(conn, ws.StateServerSide, ws.OpText, 128)
    46  
    47    _, err := io.CopyN(writer, rand.Reader, 100)
    48    if err == nil {
    49  	  err = writer.Flush()
    50    }
    51    if err != nil {
    52  	  // handle error
    53    }
    54  
    55  For more utils and helpers see the documentation.
    56  */
    57  package wsutil