command.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // +build !confonly
  2. package command
  3. import (
  4. "context"
  5. "google.golang.org/grpc"
  6. core "github.com/v2fly/v2ray-core/v4"
  7. "github.com/v2fly/v2ray-core/v4/app/observatory"
  8. "github.com/v2fly/v2ray-core/v4/common"
  9. "github.com/v2fly/v2ray-core/v4/features/extension"
  10. )
  11. type service struct {
  12. UnimplementedObservatoryServiceServer
  13. v *core.Instance
  14. observatory extension.Observatory
  15. }
  16. func (s *service) GetOutboundStatus(ctx context.Context, request *GetOutboundStatusRequest) (*GetOutboundStatusResponse, error) {
  17. resp, err := s.observatory.GetObservation(ctx)
  18. if err != nil {
  19. return nil, err
  20. }
  21. retdata := resp.(*observatory.ObservationResult)
  22. return &GetOutboundStatusResponse{
  23. Status: retdata,
  24. }, nil
  25. }
  26. func (s *service) Register(server *grpc.Server) {
  27. RegisterObservatoryServiceServer(server, s)
  28. }
  29. func init() {
  30. common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, cfg interface{}) (interface{}, error) {
  31. s := core.MustFromContext(ctx)
  32. sv := &service{v: s}
  33. err := s.RequireFeatures(func(Observatory extension.Observatory) {
  34. sv.observatory = Observatory
  35. })
  36. if err != nil {
  37. return nil, err
  38. }
  39. return sv, nil
  40. }))
  41. }