services.go 810 B

1234567891011121314151617181920212223242526272829
  1. package conf
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "github.com/golang/protobuf/jsonpb"
  6. "github.com/jhump/protoreflect/desc"
  7. "github.com/jhump/protoreflect/dynamic"
  8. "github.com/v2fly/v2ray-core/v4/common/serial"
  9. )
  10. func (c *Config) BuildServices(service map[string]*json.RawMessage) ([]*serial.TypedMessage, error) {
  11. var ret []*serial.TypedMessage
  12. for k, v := range service {
  13. message, err := desc.LoadMessageDescriptor(k)
  14. if err != nil {
  15. return nil, newError("Cannot find service", k, "").Base(err)
  16. }
  17. serviceConfig := dynamic.NewMessage(message)
  18. if err := jsonpb.Unmarshal(bytes.NewReader(*v), serviceConfig); err != nil {
  19. return nil, newError("Cannot interpret service configure file", k, "").Base(err)
  20. }
  21. ret = append(ret, serial.ToTypedMessage(serviceConfig))
  22. }
  23. return ret, nil
  24. }