refactor new instance function

This commit is contained in:
Darien Raymond 2018-10-21 19:41:12 +02:00
parent 515fcb9f87
commit 2fbf0e062d
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
1 changed files with 50 additions and 30 deletions

View File

@ -60,6 +60,52 @@ type Instance struct {
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.
// 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.
@ -106,38 +152,12 @@ func New(config *Config) (*Instance, error) {
return nil, newError("not all dependency are resolved.")
}
if len(config.Inbound) > 0 {
inboundManager := server.GetFeature(inbound.ManagerType()).(inbound.Manager)
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 err := addInboundHandlers(server, config.Inbound); err != nil {
return nil, err
}
if len(config.Outbound) > 0 {
outboundManager := server.GetFeature(outbound.ManagerType()).(outbound.Manager)
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
}
}
if err := addOutboundHandlers(server, config.Outbound); err != nil {
return nil, err
}
return server, nil