mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-02 18:10:48 +08:00
69 lines
1.3 KiB
Go
69 lines
1.3 KiB
Go
package signal
|
|
|
|
import (
|
|
"os"
|
|
gosignal "os/signal"
|
|
"syscall"
|
|
|
|
"github.com/wailsapp/wails/v2/internal/logger"
|
|
"github.com/wailsapp/wails/v2/internal/servicebus"
|
|
)
|
|
|
|
// Manager manages signals such as CTRL-C
|
|
type Manager struct {
|
|
// Service Bus
|
|
bus *servicebus.ServiceBus
|
|
|
|
// logger
|
|
logger logger.CustomLogger
|
|
|
|
// signalChannel
|
|
signalchannel chan os.Signal
|
|
|
|
// Quit channel
|
|
quitChannel <-chan *servicebus.Message
|
|
}
|
|
|
|
// NewManager creates a new signal manager
|
|
func NewManager(bus *servicebus.ServiceBus, logger *logger.Logger) (*Manager, error) {
|
|
|
|
// Register quit channel
|
|
quitChannel, err := bus.Subscribe("quit")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := &Manager{
|
|
bus: bus,
|
|
logger: logger.CustomLogger("Event Manager"),
|
|
signalchannel: make(chan os.Signal, 2),
|
|
quitChannel: quitChannel,
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
// Start the Signal Manager
|
|
func (m *Manager) Start() {
|
|
|
|
// Hook into interrupts
|
|
gosignal.Notify(m.signalchannel, os.Interrupt, syscall.SIGTERM)
|
|
|
|
// Spin off signal listener
|
|
go func() {
|
|
running := true
|
|
for running {
|
|
select {
|
|
case <-m.signalchannel:
|
|
println()
|
|
m.logger.Trace("Ctrl+C detected. Shutting down...")
|
|
m.bus.Publish("quit", "ctrl-c pressed")
|
|
case <-m.quitChannel:
|
|
running = false
|
|
break
|
|
}
|
|
}
|
|
m.logger.Trace("Shutdown")
|
|
}()
|
|
}
|