mirror of https://github.com/v2ray/v2ray-core
				
				
				
			
		
			
				
	
	
		
			27 lines
		
	
	
		
			640 B
		
	
	
	
		
			Go
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			27 lines
		
	
	
		
			640 B
		
	
	
	
		
			Go
		
	
	
		
			Executable File
		
	
| package signal
 | |
| 
 | |
| // Notifier is a utility for notifying changes. The change producer may notify changes multiple time, and the consumer may get notified asynchronously.
 | |
| type Notifier struct {
 | |
| 	c chan struct{}
 | |
| }
 | |
| 
 | |
| // NewNotifier creates a new Notifier.
 | |
| func NewNotifier() *Notifier {
 | |
| 	return &Notifier{
 | |
| 		c: make(chan struct{}, 1),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Signal signals a change, usually by producer. This method never blocks.
 | |
| func (n *Notifier) Signal() {
 | |
| 	select {
 | |
| 	case n.c <- struct{}{}:
 | |
| 	default:
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // Wait returns a channel for waiting for changes. The returned channel never gets closed.
 | |
| func (n *Notifier) Wait() <-chan struct{} {
 | |
| 	return n.c
 | |
| }
 |