| 101 | } |
| 102 | |
| 103 | func (c *Controller) StartBackend(ctx context.Context, backend *common.Backend) error { |
| 104 | c.mu.Lock() |
| 105 | defer c.mu.Unlock() |
| 106 | |
| 107 | switch backend.GetType() { |
| 108 | case common.BackendType_XRAY: |
| 109 | config, err := xray.NewConfig(backend.GetConfig(), backend.GetExcludeInbounds()) |
| 110 | if err != nil { |
| 111 | return err |
| 112 | } |
| 113 | |
| 114 | newBackend, err := xray.New( |
| 115 | ctx, |
| 116 | config, |
| 117 | backend.GetUsers(), |
| 118 | c.apiPort, |
| 119 | c.metricPort, |
| 120 | c.cfg, |
| 121 | ) |
| 122 | if err != nil { |
| 123 | return err |
| 124 | } |
| 125 | c.backend = newBackend |
| 126 | |
| 127 | case common.BackendType_WIREGUARD: |
| 128 | config, err := wireguard.NewConfig(backend.GetConfig()) |
| 129 | if err != nil { |
| 130 | return err |
| 131 | } |
| 132 | newBackend, err := wireguard.New(c.cfg, config, backend.GetUsers()) |
| 133 | if err != nil { |
| 134 | return err |
| 135 | } |
| 136 | c.backend = newBackend |
| 137 | default: |
| 138 | return errors.New("invalid backend type") |
| 139 | } |
| 140 | |
| 141 | return nil |
| 142 | } |
| 143 | |
| 144 | func (c *Controller) Backend() backend.Backend { |
| 145 | c.mu.RLock() |