1
0
mirror of https://github.com/MetaCubeX/mihomo.git synced 2025-09-20 04:25:59 +08:00

chore: cleanup ntp code

This commit is contained in:
wwqgtxx
2025-09-13 11:14:48 +08:00
parent 571be856ea
commit 08fc100c85

View File

@ -30,15 +30,14 @@ type Service struct {
func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, syncSystemTime bool) { func ReCreateNTPService(server string, interval time.Duration, dialerProxy string, syncSystemTime bool) {
globalMu.Lock() globalMu.Lock()
defer globalMu.Unlock() defer globalMu.Unlock()
service := globalSrv.Swap(nil) if service := globalSrv.Swap(nil); service != nil {
if service != nil {
service.Stop() service.Stop()
} }
if server == "" { if server == "" || interval <= 0 {
return return
} }
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
service = &Service{ service := &Service{
server: M.ParseSocksaddr(server), server: M.ParseSocksaddr(server),
dialer: proxydialer.NewByNameSingDialer(dialerProxy, dialer.NewDialer()), dialer: proxydialer.NewByNameSingDialer(dialerProxy, dialer.NewDialer()),
ticker: time.NewTicker(interval * time.Minute), ticker: time.NewTicker(interval * time.Minute),
@ -56,18 +55,13 @@ func (srv *Service) Start() {
} }
func (srv *Service) Stop() { func (srv *Service) Stop() {
log.Infoln("NTP service stop")
srv.cancel() srv.cancel()
} }
func (srv *Service) Offset() time.Duration { func (srv *Service) Offset() time.Duration {
if srv == nil {
return 0
}
if srv.ctx.Err() != nil {
return time.Duration(srv.offset.Load()) return time.Duration(srv.offset.Load())
} }
return 0
}
func (srv *Service) update() error { func (srv *Service) update() error {
var response *ntp.Response var response *ntp.Response
@ -75,6 +69,9 @@ func (srv *Service) update() error {
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
response, err = ntp.Exchange(srv.ctx, srv.dialer, srv.server) response, err = ntp.Exchange(srv.ctx, srv.dialer, srv.server)
if err != nil { if err != nil {
if srv.ctx.Err() != nil {
return nil
}
continue continue
} }
offset := response.ClockOffset offset := response.ClockOffset
@ -100,6 +97,7 @@ func (srv *Service) update() error {
} }
func (srv *Service) loopUpdate() { func (srv *Service) loopUpdate() {
defer srv.offset.Store(0)
defer srv.ticker.Stop() defer srv.ticker.Stop()
for { for {
err := srv.update() err := srv.update()
@ -116,8 +114,10 @@ func (srv *Service) loopUpdate() {
func Now() time.Time { func Now() time.Time {
now := time.Now() now := time.Now()
if offset := globalSrv.Load().Offset(); offset.Abs() > 0 { if service := globalSrv.Load(); service != nil {
if offset := service.Offset(); offset.Abs() > 0 {
now = now.Add(offset) now = now.Add(offset)
} }
}
return now return now
} }