muti.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package multiObservatory
  2. import (
  3. "context"
  4. "github.com/golang/protobuf/proto"
  5. "github.com/v2fly/v2ray-core/v4/common"
  6. "github.com/v2fly/v2ray-core/v4/common/taggedfeatures"
  7. "github.com/v2fly/v2ray-core/v4/features"
  8. "github.com/v2fly/v2ray-core/v4/features/extension"
  9. )
  10. type Observer struct {
  11. features.TaggedFeatures
  12. config *Config
  13. ctx context.Context
  14. }
  15. func (o Observer) GetObservation(ctx context.Context) (proto.Message, error) {
  16. return common.Must2(o.GetFeaturesByTag("")).(extension.Observatory).GetObservation(ctx)
  17. }
  18. func (o Observer) Type() interface{} {
  19. return extension.ObservatoryType()
  20. }
  21. func New(ctx context.Context, config *Config) (*Observer, error) {
  22. holder, err := taggedfeatures.NewHolderFromConfig(ctx, config.Holders, extension.ObservatoryType())
  23. if err != nil {
  24. return nil, err
  25. }
  26. return &Observer{config: config, ctx: ctx, TaggedFeatures: holder}, nil
  27. }
  28. func init() {
  29. common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, config interface{}) (interface{}, error) {
  30. return New(ctx, config.(*Config))
  31. }))
  32. }