| 1234567891011121314151617181920212223242526272829303132333435 | 
							- package signal
 
- // CancelSignal is a signal passed to goroutine, in order to cancel the goroutine on demand.
 
- type CancelSignal struct {
 
- 	cancel chan struct{}
 
- 	done   chan struct{}
 
- }
 
- // NewCloseSignal creates a new CancelSignal.
 
- func NewCloseSignal() *CancelSignal {
 
- 	return &CancelSignal{
 
- 		cancel: make(chan struct{}),
 
- 		done:   make(chan struct{}),
 
- 	}
 
- }
 
- // Cancel signals the goroutine to stop.
 
- func (this *CancelSignal) Cancel() {
 
- 	close(this.cancel)
 
- }
 
- // WaitForCancel should be monitored by the goroutine for when to stop.
 
- func (this *CancelSignal) WaitForCancel() <-chan struct{} {
 
- 	return this.cancel
 
- }
 
- // Done signals the caller that the goroutine has completely finished.
 
- func (this *CancelSignal) Done() {
 
- 	close(this.done)
 
- }
 
- // WaitForDone is used by caller to wait for the goroutine finishes.
 
- func (this *CancelSignal) WaitForDone() <-chan struct{} {
 
- 	return this.done
 
- }
 
 
  |