command.go 1.1 KB

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