52 lines
		
	
	
		
			990 B
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			990 B
		
	
	
	
		
			Go
		
	
	
	
package simple
 | 
						|
 | 
						|
import (
 | 
						|
	"errors"
 | 
						|
 | 
						|
	"github.com/appleboy/gorush/gorush"
 | 
						|
)
 | 
						|
 | 
						|
// Worker for simple queue using channel
 | 
						|
type Worker struct {
 | 
						|
	queueNotification chan gorush.PushNotification
 | 
						|
}
 | 
						|
 | 
						|
// Run start the worker
 | 
						|
func (s *Worker) Run(_ chan struct{}) {
 | 
						|
	for notification := range s.queueNotification {
 | 
						|
		gorush.SendNotification(notification)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Stop worker
 | 
						|
func (s *Worker) Stop() {
 | 
						|
	close(s.queueNotification)
 | 
						|
}
 | 
						|
 | 
						|
// Capacity for channel
 | 
						|
func (s *Worker) Capacity() int {
 | 
						|
	return cap(s.queueNotification)
 | 
						|
}
 | 
						|
 | 
						|
// Usage for count of channel usage
 | 
						|
func (s *Worker) Usage() int {
 | 
						|
	return len(s.queueNotification)
 | 
						|
}
 | 
						|
 | 
						|
// Enqueue send notification to queue
 | 
						|
func (s *Worker) Enqueue(job interface{}) error {
 | 
						|
	select {
 | 
						|
	case s.queueNotification <- job.(gorush.PushNotification):
 | 
						|
		return nil
 | 
						|
	default:
 | 
						|
		return errors.New("max capacity reached")
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// NewWorker for struct
 | 
						|
func NewWorker(num int) *Worker {
 | 
						|
	return &Worker{
 | 
						|
		queueNotification: make(chan gorush.PushNotification, num),
 | 
						|
	}
 | 
						|
}
 |