123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package service
- import (
- "encoding/json"
- "errors"
- "x-ui/util/common"
- "x-ui/xray"
- )
- var p *xray.Process
- var result string
- type XrayService struct {
- inboundService InboundService
- settingService SettingService
- }
- func (s *XrayService) IsXrayRunning() bool {
- return p != nil && p.IsRunning()
- }
- func (s *XrayService) GetXrayErr() error {
- if p == nil {
- return nil
- }
- return p.GetErr()
- }
- func (s *XrayService) GetXrayResult() string {
- if result != "" {
- return result
- }
- if s.IsXrayRunning() {
- return ""
- }
- if p == nil {
- return ""
- }
- result = p.GetResult()
- return result
- }
- func (s *XrayService) GetXrayVersion() string {
- if p == nil {
- return "Unknown"
- }
- return p.GetVersion()
- }
- func (s *XrayService) GetXrayConfig() (*xray.Config, error) {
- templateConfig, err := s.settingService.GetXrayConfigTemplate()
- if err != nil {
- return nil, err
- }
- xrayConfig := &xray.Config{}
- err = json.Unmarshal([]byte(templateConfig), xrayConfig)
- if err != nil {
- return nil, err
- }
- inbounds, err := s.inboundService.GetAllInbounds()
- if err != nil {
- return nil, err
- }
- for _, inbound := range inbounds {
- inboundConfig := inbound.GenXrayInboundConfig()
- xrayConfig.InboundConfigs = append(xrayConfig.InboundConfigs, *inboundConfig)
- }
- return xrayConfig, nil
- }
- func (s *XrayService) StartXray() error {
- if s.IsXrayRunning() {
- return nil
- }
- xrayConfig, err := s.GetXrayConfig()
- if err != nil {
- return err
- }
- p = xray.NewProcess(xrayConfig)
- err = p.Start()
- result = ""
- return err
- }
- func (s *XrayService) StopXray() error {
- if s.IsXrayRunning() {
- return p.Stop()
- }
- return errors.New("xray is not running")
- }
- func (s *XrayService) RestartXray() error {
- err1 := s.StopXray()
- err2 := s.StartXray()
- return common.Combine(err1, err2)
- }
|