mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-09-15 21:00:27 +00:00
45 lines
706 B
Go
45 lines
706 B
Go
package powerreport
|
|
|
|
import (
|
|
"sync"
|
|
"sync/atomic"
|
|
)
|
|
|
|
type Manager struct {
|
|
access sync.Mutex
|
|
recorder atomic.Pointer[Recorder]
|
|
}
|
|
|
|
func NewManager() *Manager {
|
|
return &Manager{}
|
|
}
|
|
|
|
func (m *Manager) Start(options Options) error {
|
|
m.access.Lock()
|
|
defer m.access.Unlock()
|
|
if m.recorder.Load() != nil {
|
|
return nil
|
|
}
|
|
recorder := NewRecorder(options)
|
|
err := recorder.Start()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
m.recorder.Store(recorder)
|
|
return nil
|
|
}
|
|
|
|
func (m *Manager) Close() error {
|
|
m.access.Lock()
|
|
defer m.access.Unlock()
|
|
recorder := m.recorder.Swap(nil)
|
|
if recorder == nil {
|
|
return nil
|
|
}
|
|
return recorder.Close()
|
|
}
|
|
|
|
func (m *Manager) Recorder() *Recorder {
|
|
return m.recorder.Load()
|
|
}
|