diff options
Diffstat (limited to 'web/service/xray.go')
| -rw-r--r-- | web/service/xray.go | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/web/service/xray.go b/web/service/xray.go index 93cbd9f0..43178d2f 100644 --- a/web/service/xray.go +++ b/web/service/xray.go @@ -20,16 +20,20 @@ var ( result string ) +// XrayService provides business logic for Xray process management. +// It handles starting, stopping, restarting Xray, and managing its configuration. type XrayService struct { inboundService InboundService settingService SettingService xrayAPI xray.XrayAPI } +// IsXrayRunning checks if the Xray process is currently running. func (s *XrayService) IsXrayRunning() bool { return p != nil && p.IsRunning() } +// GetXrayErr returns the error from the Xray process, if any. func (s *XrayService) GetXrayErr() error { if p == nil { return nil @@ -46,6 +50,7 @@ func (s *XrayService) GetXrayErr() error { return err } +// GetXrayResult returns the result string from the Xray process. func (s *XrayService) GetXrayResult() string { if result != "" { return result @@ -68,6 +73,7 @@ func (s *XrayService) GetXrayResult() string { return result } +// GetXrayVersion returns the version of the running Xray process. func (s *XrayService) GetXrayVersion() string { if p == nil { return "Unknown" @@ -75,10 +81,13 @@ func (s *XrayService) GetXrayVersion() string { return p.GetVersion() } +// RemoveIndex removes an element at the specified index from a slice. +// Returns a new slice with the element removed. func RemoveIndex(s []any, index int) []any { return append(s[:index], s[index+1:]...) } +// GetXrayConfig retrieves and builds the Xray configuration from settings and inbounds. func (s *XrayService) GetXrayConfig() (*xray.Config, error) { templateConfig, err := s.settingService.GetXrayConfigTemplate() if err != nil { @@ -182,6 +191,7 @@ func (s *XrayService) GetXrayConfig() (*xray.Config, error) { return xrayConfig, nil } +// GetXrayTraffic fetches the current traffic statistics from the running Xray process. func (s *XrayService) GetXrayTraffic() ([]*xray.Traffic, []*xray.ClientTraffic, error) { if !s.IsXrayRunning() { err := errors.New("xray is not running") @@ -200,6 +210,7 @@ func (s *XrayService) GetXrayTraffic() ([]*xray.Traffic, []*xray.ClientTraffic, return traffic, clientTraffic, nil } +// RestartXray restarts the Xray process, optionally forcing a restart even if config unchanged. func (s *XrayService) RestartXray(isForce bool) error { lock.Lock() defer lock.Unlock() @@ -229,6 +240,7 @@ func (s *XrayService) RestartXray(isForce bool) error { return nil } +// StopXray stops the running Xray process. func (s *XrayService) StopXray() error { lock.Lock() defer lock.Unlock() @@ -240,15 +252,17 @@ func (s *XrayService) StopXray() error { return errors.New("xray is not running") } +// SetToNeedRestart marks that Xray needs to be restarted. func (s *XrayService) SetToNeedRestart() { isNeedXrayRestart.Store(true) } +// IsNeedRestartAndSetFalse checks if restart is needed and resets the flag to false. func (s *XrayService) IsNeedRestartAndSetFalse() bool { return isNeedXrayRestart.CompareAndSwap(true, false) } -// Check if Xray is not running and wasn't stopped manually, i.e. crashed +// DidXrayCrash checks if Xray crashed by verifying it's not running and wasn't manually stopped. func (s *XrayService) DidXrayCrash() bool { return !s.IsXrayRunning() && !isManuallyStopped.Load() } |
