...

Source file src/github.com/alibabacloud-go/tea/utils/progress.go

Documentation: github.com/alibabacloud-go/tea/utils

     1  package utils
     2  
     3  // ProgressEventType defines transfer progress event type
     4  type ProgressEventType int
     5  
     6  const (
     7  	// TransferStartedEvent transfer started, set TotalBytes
     8  	TransferStartedEvent ProgressEventType = 1 + iota
     9  	// TransferDataEvent transfer data, set ConsumedBytes anmd TotalBytes
    10  	TransferDataEvent
    11  	// TransferCompletedEvent transfer completed
    12  	TransferCompletedEvent
    13  	// TransferFailedEvent transfer encounters an error
    14  	TransferFailedEvent
    15  )
    16  
    17  // ProgressEvent defines progress event
    18  type ProgressEvent struct {
    19  	ConsumedBytes int64
    20  	TotalBytes    int64
    21  	RwBytes       int64
    22  	EventType     ProgressEventType
    23  }
    24  
    25  // ProgressListener listens progress change
    26  type ProgressListener interface {
    27  	ProgressChanged(event *ProgressEvent)
    28  }
    29  
    30  // -------------------- Private --------------------
    31  
    32  func NewProgressEvent(eventType ProgressEventType, consumed, total int64, rwBytes int64) *ProgressEvent {
    33  	return &ProgressEvent{
    34  		ConsumedBytes: consumed,
    35  		TotalBytes:    total,
    36  		RwBytes:       rwBytes,
    37  		EventType:     eventType}
    38  }
    39  
    40  // publishProgress
    41  func PublishProgress(listener ProgressListener, event *ProgressEvent) {
    42  	if listener != nil && event != nil {
    43  		listener.ProgressChanged(event)
    44  	}
    45  }
    46  
    47  func GetProgressListener(obj interface{}) ProgressListener {
    48  	if obj == nil {
    49  		return nil
    50  	}
    51  	listener, ok := obj.(ProgressListener)
    52  	if !ok {
    53  		return nil
    54  	}
    55  	return listener
    56  }
    57  
    58  type ReaderTracker struct {
    59  	CompletedBytes int64
    60  }
    61  

View as plain text