You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							53 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							53 lines
						
					
					
						
							1.1 KiB
						
					
					
				| package needle | |
| 
 | |
| type AsyncRequest struct { | |
| 	N              *Needle | |
| 	IsWriteRequest bool | |
| 	ActualSize     int64 | |
| 	offset         uint64 | |
| 	size           uint64 | |
| 	doneChan       chan interface{} | |
| 	isUnchanged    bool | |
| 	err            error | |
| } | |
| 
 | |
| func NewAsyncRequest(n *Needle, isWriteRequest bool) *AsyncRequest { | |
| 	return &AsyncRequest{ | |
| 		offset:         0, | |
| 		size:           0, | |
| 		ActualSize:     0, | |
| 		doneChan:       make(chan interface{}), | |
| 		N:              n, | |
| 		isUnchanged:    false, | |
| 		IsWriteRequest: isWriteRequest, | |
| 		err:            nil, | |
| 	} | |
| } | |
| 
 | |
| func (r *AsyncRequest) WaitComplete() (uint64, uint64, bool, error) { | |
| 	<-r.doneChan | |
| 	return r.offset, r.size, r.isUnchanged, r.err | |
| } | |
| 
 | |
| func (r *AsyncRequest) Complete(offset uint64, size uint64, isUnchanged bool, err error) { | |
| 	r.offset = offset | |
| 	r.size = size | |
| 	r.isUnchanged = isUnchanged | |
| 	r.err = err | |
| 	close(r.doneChan) | |
| } | |
| 
 | |
| func (r *AsyncRequest) UpdateResult(offset uint64, size uint64, isUnchanged bool, err error) { | |
| 	r.offset = offset | |
| 	r.size = size | |
| 	r.isUnchanged = isUnchanged | |
| 	r.err = err | |
| } | |
| 
 | |
| func (r *AsyncRequest) Submit() { | |
| 	close(r.doneChan) | |
| } | |
| 
 | |
| func (r *AsyncRequest) IsSucceed() bool { | |
| 	return r.err == nil | |
| }
 |