mirror of
https://github.com/wyx2685/V2bX.git
synced 2025-02-01 22:38:13 -05:00
support core adaptive
This commit is contained in:
parent
a95a060d60
commit
946e130997
50
conf/node.go
50
conf/node.go
@ -23,16 +23,6 @@ type ApiConfig struct {
|
|||||||
RuleListPath string `json:"RuleListPath"`
|
RuleListPath string `json:"RuleListPath"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Options struct {
|
|
||||||
Core string `json:"Core"`
|
|
||||||
ListenIP string `json:"ListenIP"`
|
|
||||||
SendIP string `json:"SendIP"`
|
|
||||||
LimitConfig LimitConfig `json:"LimitConfig"`
|
|
||||||
XrayOptions *XrayOptions `json:"XrayOptions"`
|
|
||||||
SingOptions *SingOptions `json:"SingOptions"`
|
|
||||||
CertConfig *CertConfig `json:"CertConfig"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (n *NodeConfig) UnmarshalJSON(data []byte) (err error) {
|
func (n *NodeConfig) UnmarshalJSON(data []byte) (err error) {
|
||||||
r := rawNodeConfig{}
|
r := rawNodeConfig{}
|
||||||
err = json.Unmarshal(data, &r)
|
err = json.Unmarshal(data, &r)
|
||||||
@ -46,6 +36,7 @@ func (n *NodeConfig) UnmarshalJSON(data []byte) (err error) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
n.ApiConfig = ApiConfig{
|
n.ApiConfig = ApiConfig{
|
||||||
|
APIHost: "http://127.0.0.1",
|
||||||
Timeout: 30,
|
Timeout: 30,
|
||||||
}
|
}
|
||||||
err = json.Unmarshal(data, &n.ApiConfig)
|
err = json.Unmarshal(data, &n.ApiConfig)
|
||||||
@ -61,7 +52,6 @@ func (n *NodeConfig) UnmarshalJSON(data []byte) (err error) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
n.Options = Options{
|
n.Options = Options{
|
||||||
Core: "xray",
|
|
||||||
ListenIP: "0.0.0.0",
|
ListenIP: "0.0.0.0",
|
||||||
SendIP: "0.0.0.0",
|
SendIP: "0.0.0.0",
|
||||||
}
|
}
|
||||||
@ -70,13 +60,35 @@ func (n *NodeConfig) UnmarshalJSON(data []byte) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch n.Options.Core {
|
|
||||||
case "xray":
|
|
||||||
n.Options.XrayOptions = NewXrayOptions()
|
|
||||||
return json.Unmarshal(data, n.Options.XrayOptions)
|
|
||||||
case "sing":
|
|
||||||
n.Options.SingOptions = NewSingOptions()
|
|
||||||
return json.Unmarshal(data, n.Options.SingOptions)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Options struct {
|
||||||
|
Core string `json:"Core"`
|
||||||
|
ListenIP string `json:"ListenIP"`
|
||||||
|
SendIP string `json:"SendIP"`
|
||||||
|
LimitConfig LimitConfig `json:"LimitConfig"`
|
||||||
|
RawOptions json.RawMessage `json:"RawOptions"`
|
||||||
|
XrayOptions *XrayOptions `json:"XrayOptions"`
|
||||||
|
SingOptions *SingOptions `json:"SingOptions"`
|
||||||
|
CertConfig *CertConfig `json:"CertConfig"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *Options) UnmarshalJSON(data []byte) error {
|
||||||
|
type opt Options
|
||||||
|
err := json.Unmarshal(data, (*opt)(o))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
switch o.Core {
|
||||||
|
case "xray":
|
||||||
|
o.XrayOptions = NewXrayOptions()
|
||||||
|
return json.Unmarshal(data, o.XrayOptions)
|
||||||
|
case "sing":
|
||||||
|
o.SingOptions = NewSingOptions()
|
||||||
|
return json.Unmarshal(data, o.SingOptions)
|
||||||
|
default:
|
||||||
|
o.RawOptions = data
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -2,6 +2,7 @@ package core
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/InazumaV/V2bX/api/panel"
|
"github.com/InazumaV/V2bX/api/panel"
|
||||||
@ -40,11 +41,19 @@ func isSupported(protocol string, protocols []string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Selector) AddNode(tag string, info *panel.NodeInfo, option *conf.Options) error {
|
func (s *Selector) AddNode(tag string, info *panel.NodeInfo, option *conf.Options) error {
|
||||||
for i := range s.cores {
|
for i, c := range s.cores {
|
||||||
if option.Core != s.cores[i].Type() {
|
if len(option.Core) == 0 {
|
||||||
|
if isSupported(info.Type, c.Protocols()) {
|
||||||
|
option.Core = c.Type()
|
||||||
|
err := option.UnmarshalJSON(option.RawOptions)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unmarshal option error: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if option.Core != c.Type() {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
err := s.cores[i].AddNode(tag, info, option)
|
err := c.AddNode(tag, info, option)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user