mirror of https://github.com/v2ray/v2ray-core
refactor new instance function
parent
515fcb9f87
commit
2fbf0e062d
80
v2ray.go
80
v2ray.go
|
@ -60,6 +60,52 @@ type Instance struct {
|
||||||
running bool
|
running bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addInboundHandlers(server *Instance, configs []*InboundHandlerConfig) error {
|
||||||
|
if len(configs) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
inboundManager := server.GetFeature(inbound.ManagerType()).(inbound.Manager)
|
||||||
|
for _, inboundConfig := range configs {
|
||||||
|
rawHandler, err := CreateObject(server, inboundConfig)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
handler, ok := rawHandler.(inbound.Handler)
|
||||||
|
if !ok {
|
||||||
|
return newError("not an InboundHandler")
|
||||||
|
}
|
||||||
|
if err := inboundManager.AddHandler(context.Background(), handler); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func addOutboundHandlers(server *Instance, configs []*OutboundHandlerConfig) error {
|
||||||
|
if len(configs) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
outboundManager := server.GetFeature(outbound.ManagerType()).(outbound.Manager)
|
||||||
|
for _, outboundConfig := range configs {
|
||||||
|
rawHandler, err := CreateObject(server, outboundConfig)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
handler, ok := rawHandler.(outbound.Handler)
|
||||||
|
if !ok {
|
||||||
|
return newError("not an OutboundHandler")
|
||||||
|
}
|
||||||
|
if err := outboundManager.AddHandler(context.Background(), handler); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// New returns a new V2Ray instance based on given configuration.
|
// New returns a new V2Ray instance based on given configuration.
|
||||||
// The instance is not started at this point.
|
// The instance is not started at this point.
|
||||||
// To ensure V2Ray instance works properly, the config must contain one Dispatcher, one InboundHandlerManager and one OutboundHandlerManager. Other features are optional.
|
// To ensure V2Ray instance works properly, the config must contain one Dispatcher, one InboundHandlerManager and one OutboundHandlerManager. Other features are optional.
|
||||||
|
@ -106,38 +152,12 @@ func New(config *Config) (*Instance, error) {
|
||||||
return nil, newError("not all dependency are resolved.")
|
return nil, newError("not all dependency are resolved.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(config.Inbound) > 0 {
|
if err := addInboundHandlers(server, config.Inbound); err != nil {
|
||||||
inboundManager := server.GetFeature(inbound.ManagerType()).(inbound.Manager)
|
return nil, err
|
||||||
for _, inboundConfig := range config.Inbound {
|
|
||||||
rawHandler, err := CreateObject(server, inboundConfig)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
handler, ok := rawHandler.(inbound.Handler)
|
|
||||||
if !ok {
|
|
||||||
return nil, newError("not an InboundHandler")
|
|
||||||
}
|
|
||||||
if err := inboundManager.AddHandler(context.Background(), handler); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(config.Outbound) > 0 {
|
if err := addOutboundHandlers(server, config.Outbound); err != nil {
|
||||||
outboundManager := server.GetFeature(outbound.ManagerType()).(outbound.Manager)
|
return nil, err
|
||||||
for _, outboundConfig := range config.Outbound {
|
|
||||||
rawHandler, err := CreateObject(server, outboundConfig)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
handler, ok := rawHandler.(outbound.Handler)
|
|
||||||
if !ok {
|
|
||||||
return nil, newError("not an OutboundHandler")
|
|
||||||
}
|
|
||||||
if err := outboundManager.AddHandler(context.Background(), handler); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return server, nil
|
return server, nil
|
||||||
|
|
Loading…
Reference in New Issue