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:
@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user