github.com/pharosnet/flyline@v1.0.2/buffer.go (about)

     1  package flyline
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  )
     7  
     8  var ErrBufSendClosed = errors.New("can not send item into the closed buffer")
     9  var ErrBufCloseClosed = errors.New("can not close buffer, buffer is closed")
    10  var ErrBufSyncUnclosed = errors.New("can not sync buffer, buffer is not closed")
    11  
    12  // buffer interface
    13  type Buffer interface {
    14  	// Send item into buffer.
    15  	Send(i interface{}) (err error)
    16  	// Recv value from buffer, if active eq false, then the buffer is closed and no remains.
    17  	Recv() (value interface{}, active bool)
    18  	// Get remains length
    19  	Len() (length int64)
    20  	// Close Buffer, when closed, can not send item into buffer, but can recv remains.
    21  	Close() (err error)
    22  	// Sync, waiting for remains to be received. Only can be called after Close().
    23  	Sync(ctx context.Context) (err error)
    24  }