zworld/engine/interrupter.go

40 lines
530 B
Go
Raw Permalink Normal View History

2024-01-14 22:56:06 +08:00
package engine
import (
"log"
"os"
"os/signal"
)
type Interrupter interface {
Running() bool
}
type interrupter struct {
running bool
}
func (r *interrupter) Running() bool {
return r.running
}
func NewInterrupter() Interrupter {
sigint := make(chan os.Signal, 1)
signal.Notify(sigint, os.Interrupt)
r := &interrupter{running: true}
go func() {
for range sigint {
if !r.running {
log.Println("Kill")
os.Exit(1)
} else {
log.Println("Interrupt")
r.running = false
}
}
}()
return r
}