command.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package command
  2. import (
  3. "context"
  4. "github.com/xtls/xray-core/app/log"
  5. "github.com/xtls/xray-core/common"
  6. "github.com/xtls/xray-core/common/errors"
  7. "github.com/xtls/xray-core/core"
  8. grpc "google.golang.org/grpc"
  9. )
  10. type LoggerServer struct {
  11. V *core.Instance
  12. }
  13. // RestartLogger implements LoggerService.
  14. func (s *LoggerServer) RestartLogger(ctx context.Context, request *RestartLoggerRequest) (*RestartLoggerResponse, error) {
  15. logger := s.V.GetFeature((*log.Instance)(nil))
  16. if logger == nil {
  17. return nil, errors.New("unable to get logger instance")
  18. }
  19. if err := logger.Close(); err != nil {
  20. return nil, errors.New("failed to close logger").Base(err)
  21. }
  22. if err := logger.Start(); err != nil {
  23. return nil, errors.New("failed to start logger").Base(err)
  24. }
  25. return &RestartLoggerResponse{}, nil
  26. }
  27. func (s *LoggerServer) mustEmbedUnimplementedLoggerServiceServer() {}
  28. type service struct {
  29. v *core.Instance
  30. }
  31. func (s *service) Register(server *grpc.Server) {
  32. ls := &LoggerServer{
  33. V: s.v,
  34. }
  35. RegisterLoggerServiceServer(server, ls)
  36. // For compatibility purposes
  37. vCoreDesc := LoggerService_ServiceDesc
  38. vCoreDesc.ServiceName = "v2ray.core.app.log.command.LoggerService"
  39. server.RegisterService(&vCoreDesc, ls)
  40. }
  41. func init() {
  42. common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, cfg interface{}) (interface{}, error) {
  43. s := core.MustFromContext(ctx)
  44. return &service{v: s}, nil
  45. }))
  46. }