Browse Source

refactor new instance function

pull/1343/head
Darien Raymond 6 years ago
parent
commit
2fbf0e062d
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
  1. 76
      v2ray.go

76
v2ray.go

@ -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,39 +152,13 @@ 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 {
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 {
if err := addOutboundHandlers(server, config.Outbound); 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
}

Loading…
Cancel
Save