command.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package command
  2. import (
  3. "context"
  4. core "github.com/v2fly/v2ray-core/v5"
  5. "github.com/v2fly/v2ray-core/v5/app/subscription"
  6. "github.com/v2fly/v2ray-core/v5/common"
  7. "google.golang.org/grpc"
  8. )
  9. //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
  10. type SubscriptionManagerService struct {
  11. UnimplementedSubscriptionManagerServiceServer
  12. manager subscription.SubscriptionManager
  13. }
  14. func NewSubscriptionManagerService(manager subscription.SubscriptionManager) *SubscriptionManagerService {
  15. return &SubscriptionManagerService{manager: manager}
  16. }
  17. func (s *SubscriptionManagerService) ListTrackedSubscription(ctx context.Context, req *ListTrackedSubscriptionRequest) (*ListTrackedSubscriptionResponse, error) {
  18. if s.manager == nil {
  19. return nil, newError("subscription manager is not available")
  20. }
  21. names := s.manager.ListTrackedSubscriptions()
  22. return &ListTrackedSubscriptionResponse{Names: names}, nil
  23. }
  24. func (s *SubscriptionManagerService) AddTrackedSubscription(ctx context.Context, req *AddTrackedSubscriptionRequest) (*AddTrackedSubscriptionResponse, error) {
  25. if s.manager == nil {
  26. return nil, newError("subscription manager is not available")
  27. }
  28. err := s.manager.AddTrackedSubscriptionFromImportSource(req.Source)
  29. if err != nil {
  30. return nil, err
  31. }
  32. return &AddTrackedSubscriptionResponse{}, nil
  33. }
  34. func (s *SubscriptionManagerService) RemoveTrackedSubscription(ctx context.Context, req *RemoveTrackedSubscriptionRequest) (*RemoveTrackedSubscriptionResponse, error) {
  35. if s.manager == nil {
  36. return nil, newError("subscription manager is not available")
  37. }
  38. err := s.manager.RemoveTrackedSubscription(req.Name)
  39. if err != nil {
  40. return nil, err
  41. }
  42. return &RemoveTrackedSubscriptionResponse{}, nil
  43. }
  44. func (s *SubscriptionManagerService) GetTrackedSubscriptionStatus(ctx context.Context, req *GetTrackedSubscriptionStatusRequest) (*GetTrackedSubscriptionStatusResponse, error) {
  45. if s.manager == nil {
  46. return nil, newError("subscription manager is not available")
  47. }
  48. status, err := s.manager.GetTrackedSubscriptionStatus(req.Name)
  49. if err != nil {
  50. return nil, err
  51. }
  52. return &GetTrackedSubscriptionStatusResponse{Status: status}, nil
  53. }
  54. func (s *SubscriptionManagerService) Register(server *grpc.Server) {
  55. RegisterSubscriptionManagerServiceServer(server, s)
  56. }
  57. func init() {
  58. common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, cfg interface{}) (interface{}, error) {
  59. var manager subscription.SubscriptionManager
  60. common.Must(core.RequireFeatures(ctx, func(m subscription.SubscriptionManager) {
  61. manager = m
  62. }))
  63. service := NewSubscriptionManagerService(manager)
  64. return service, nil
  65. }))
  66. }