mirror of
https://github.com/status-im/status-go.git
synced 2025-01-09 14:16:21 +00:00
eeca435064
Update vendor Integrate rendezvous into status node Add a test with failover using rendezvous Use multiple servers in client Use discovery V5 by default and test that node can be started with rendezvous discovet Fix linter Update rendezvous client to one with instrumented stream Address feedback Fix test with updated topic limits Apply several suggestions Change log to debug for request errors because we continue execution Remove web3js after rebase Update rendezvous package
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
package msgio
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"sync"
|
|
)
|
|
|
|
// LimitedReader wraps an io.Reader with a msgio framed reader. The LimitedReader
|
|
// will return a reader which will io.EOF when the msg length is done.
|
|
func LimitedReader(r io.Reader) (io.Reader, error) {
|
|
l, err := ReadLen(r, nil)
|
|
return io.LimitReader(r, int64(l)), err
|
|
}
|
|
|
|
// LimitedWriter wraps an io.Writer with a msgio framed writer. It is the inverse
|
|
// of LimitedReader: it will buffer all writes until "Flush" is called. When Flush
|
|
// is called, it will write the size of the buffer first, flush the buffer, reset
|
|
// the buffer, and begin accept more incoming writes.
|
|
func NewLimitedWriter(w io.Writer) *LimitedWriter {
|
|
return &LimitedWriter{W: w}
|
|
}
|
|
|
|
type LimitedWriter struct {
|
|
W io.Writer
|
|
B bytes.Buffer
|
|
M sync.Mutex
|
|
}
|
|
|
|
func (w *LimitedWriter) Write(buf []byte) (n int, err error) {
|
|
w.M.Lock()
|
|
n, err = w.B.Write(buf)
|
|
w.M.Unlock()
|
|
return n, err
|
|
}
|
|
|
|
func (w *LimitedWriter) Flush() error {
|
|
w.M.Lock()
|
|
defer w.M.Unlock()
|
|
if err := WriteLen(w.W, w.B.Len()); err != nil {
|
|
return err
|
|
}
|
|
_, err := w.B.WriteTo(w.W)
|
|
return err
|
|
}
|