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
							 | 
						|
								}
							 |