mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-09-27 03:25:56 +08:00

- Refactor frame converter implementation - Update mp4 track to use ICodex - General refactoring and code improvements 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
55 lines
959 B
Go
55 lines
959 B
Go
package task
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
)
|
|
|
|
type shutdown interface {
|
|
Shutdown()
|
|
}
|
|
|
|
type OSSignal struct {
|
|
ChannelTask
|
|
root shutdown
|
|
}
|
|
|
|
func (o *OSSignal) Start() error {
|
|
signalChan := make(chan os.Signal, 1)
|
|
signal.Notify(signalChan, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
|
|
o.SignalChan = signalChan
|
|
o.OnStop(func() {
|
|
signal.Stop(signalChan)
|
|
close(signalChan)
|
|
})
|
|
return nil
|
|
}
|
|
|
|
func (o *OSSignal) Tick(any) {
|
|
println("OSSignal Tick")
|
|
go o.root.Shutdown()
|
|
}
|
|
|
|
type RootManager[K comparable, T ManagerItem[K]] struct {
|
|
WorkCollection[K, T]
|
|
}
|
|
|
|
func (m *RootManager[K, T]) Init() {
|
|
m.parentCtx = context.Background()
|
|
m.reset()
|
|
m.handler = m
|
|
m.Logger = slog.New(slog.NewTextHandler(os.Stdout, nil))
|
|
m.StartTime = time.Now()
|
|
m.AddTask(&OSSignal{root: m}).WaitStarted()
|
|
m.state = TASK_STATE_STARTED
|
|
}
|
|
|
|
func (m *RootManager[K, T]) Shutdown() {
|
|
m.Stop(ErrExit)
|
|
m.dispose()
|
|
}
|