48 lines
799 B
Go
48 lines
799 B
Go
package server
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/charmbracelet/log"
|
|
)
|
|
|
|
type Worker struct {
|
|
logger *log.Logger
|
|
stop chan bool
|
|
stopped chan bool
|
|
}
|
|
|
|
func NewWorker(logger *log.Logger) *Worker {
|
|
return &Worker{
|
|
logger: logger,
|
|
stop: make(chan bool, 1),
|
|
stopped: make(chan bool, 1),
|
|
}
|
|
}
|
|
|
|
func (w *Worker) Start() {
|
|
w.logger.Info("starting worker")
|
|
go w.run()
|
|
w.logger.Info("worker started")
|
|
}
|
|
|
|
func (w *Worker) Stop() {
|
|
w.logger.Info("stopping worker")
|
|
w.stop <- true
|
|
<-w.stopped
|
|
w.logger.Info("worker stopped")
|
|
}
|
|
|
|
func (w *Worker) run() {
|
|
ticker := time.NewTicker(1 * time.Second)
|
|
for {
|
|
select {
|
|
case t := <-ticker.C:
|
|
w.logger.Info("ticker ticked for worker", "tick", t)
|
|
case <-w.stop:
|
|
w.logger.Info("received stop signal")
|
|
w.stopped <- true
|
|
return
|
|
}
|
|
}
|
|
}
|