From a390c7fc76f21b0117da2ba4167e2dbe1ba0ee11 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Fri, 27 Oct 2023 14:36:00 +0330 Subject: [PATCH] Add start delay --- custom/command_server.go | 13 ++++++++++--- custom/custom.go | 15 +++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/custom/command_server.go b/custom/command_server.go index de28e87..786f45b 100644 --- a/custom/command_server.go +++ b/custom/command_server.go @@ -1,12 +1,16 @@ package main -import "github.com/sagernet/sing-box/experimental/libbox" +import ( + "github.com/sagernet/sing-box/experimental/libbox" + "github.com/sagernet/sing-box/log" +) var commandServer *libbox.CommandServer type CommandServerHandler struct{} func (csh *CommandServerHandler) ServiceReload() error { + log.Trace("[Command Server Handler] Reloading service") propagateStatus(Starting) if commandServer != nil { commandServer.SetService(nil) @@ -16,18 +20,21 @@ func (csh *CommandServerHandler) ServiceReload() error { box.Close() box = nil } - return startService() + return startService(true) } func (csh *CommandServerHandler) GetSystemProxyStatus() *libbox.SystemProxyStatus { + log.Trace("[Command Server Handler] Getting system proxy status") return &libbox.SystemProxyStatus{Available: true, Enabled: false} } func (csh *CommandServerHandler) SetSystemProxyEnabled(isEnabled bool) error { - return nil + log.Trace("[Command Server Handler] Setting system proxy status") + return csh.ServiceReload() } func startCommandServer() error { + log.Trace("[Command Server Handler] Starting command server") commandServer = libbox.NewCommandServer(&CommandServerHandler{}, 300) return commandServer.Start() } diff --git a/custom/custom.go b/custom/custom.go index 521d7df..246abcd 100644 --- a/custom/custom.go +++ b/custom/custom.go @@ -7,11 +7,13 @@ import "C" import ( "encoding/json" "os" + "time" "unsafe" "github.com/hiddify/libcore/bridge" "github.com/hiddify/libcore/shared" "github.com/sagernet/sing-box/experimental/libbox" + "github.com/sagernet/sing-box/log" ) var box *libbox.BoxService @@ -71,14 +73,14 @@ func start(configPath *C.char, disableMemoryLimit bool) (CErr *C.char) { activeConfigPath = &path libbox.SetMemoryLimit(!disableMemoryLimit) - err := startService() + err := startService(false) if err != nil { return C.CString(err.Error()) } return C.CString("") } -func startService() error { +func startService(delayStart bool) error { content, err := os.ReadFile(*activeConfigPath) if err != nil { return stopAndAlert(EmptyConfiguration, err) @@ -100,6 +102,11 @@ func startService() error { if err != nil { return stopAndAlert(CreateService, err) } + + if delayStart { + time.Sleep(250 * time.Millisecond) + } + err = instance.Start() if err != nil { return stopAndAlert(StartService, err) @@ -147,6 +154,7 @@ func restart(configPath *C.char, disableMemoryLimit bool) (CErr *C.char) { defer shared.DeferPanicToError("restart", func(err error) { CErr = C.CString(err.Error()) }) + log.Debug("[Service] Restarting") if status != Started { return C.CString("") @@ -159,6 +167,9 @@ func restart(configPath *C.char, disableMemoryLimit bool) (CErr *C.char) { if C.GoString(err) != "" { return err } + + time.Sleep(250 * time.Millisecond) + err = start(configPath, disableMemoryLimit) if C.GoString(err) != "" { return err