service.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package daemon
  2. import (
  3. "syscall"
  4. "src.elv.sh/pkg/daemon/internal/api"
  5. "src.elv.sh/pkg/store/storedefs"
  6. )
  7. // A net/rpc service for the daemon.
  8. type service struct {
  9. version int
  10. store storedefs.Store
  11. err error
  12. }
  13. // Implementations of RPC methods.
  14. // Version returns the API version number.
  15. func (s *service) Version(req *api.VersionRequest, res *api.VersionResponse) error {
  16. res.Version = s.version
  17. return nil
  18. }
  19. // Pid returns the process ID of the daemon.
  20. func (s *service) Pid(req *api.PidRequest, res *api.PidResponse) error {
  21. res.Pid = syscall.Getpid()
  22. return nil
  23. }
  24. func (s *service) NextCmdSeq(req *api.NextCmdSeqRequest, res *api.NextCmdSeqResponse) error {
  25. if s.err != nil {
  26. return s.err
  27. }
  28. seq, err := s.store.NextCmdSeq()
  29. res.Seq = seq
  30. return err
  31. }
  32. func (s *service) AddCmd(req *api.AddCmdRequest, res *api.AddCmdResponse) error {
  33. if s.err != nil {
  34. return s.err
  35. }
  36. seq, err := s.store.AddCmd(req.Text)
  37. res.Seq = seq
  38. return err
  39. }
  40. func (s *service) DelCmd(req *api.DelCmdRequest, res *api.DelCmdResponse) error {
  41. if s.err != nil {
  42. return s.err
  43. }
  44. err := s.store.DelCmd(req.Seq)
  45. return err
  46. }
  47. func (s *service) Cmd(req *api.CmdRequest, res *api.CmdResponse) error {
  48. if s.err != nil {
  49. return s.err
  50. }
  51. text, err := s.store.Cmd(req.Seq)
  52. res.Text = text
  53. return err
  54. }
  55. func (s *service) CmdsWithSeq(req *api.CmdsWithSeqRequest, res *api.CmdsWithSeqResponse) error {
  56. if s.err != nil {
  57. return s.err
  58. }
  59. cmds, err := s.store.CmdsWithSeq(req.From, req.Upto)
  60. res.Cmds = cmds
  61. return err
  62. }
  63. func (s *service) NextCmd(req *api.NextCmdRequest, res *api.NextCmdResponse) error {
  64. if s.err != nil {
  65. return s.err
  66. }
  67. cmd, err := s.store.NextCmd(req.From, req.Prefix)
  68. res.Seq, res.Text = cmd.Seq, cmd.Text
  69. return err
  70. }
  71. func (s *service) PrevCmd(req *api.PrevCmdRequest, res *api.PrevCmdResponse) error {
  72. if s.err != nil {
  73. return s.err
  74. }
  75. cmd, err := s.store.PrevCmd(req.Upto, req.Prefix)
  76. res.Seq, res.Text = cmd.Seq, cmd.Text
  77. return err
  78. }
  79. func (s *service) AddDir(req *api.AddDirRequest, res *api.AddDirResponse) error {
  80. if s.err != nil {
  81. return s.err
  82. }
  83. return s.store.AddDir(req.Dir, req.IncFactor)
  84. }
  85. func (s *service) DelDir(req *api.DelDirRequest, res *api.DelDirResponse) error {
  86. if s.err != nil {
  87. return s.err
  88. }
  89. return s.store.DelDir(req.Dir)
  90. }
  91. func (s *service) Dirs(req *api.DirsRequest, res *api.DirsResponse) error {
  92. if s.err != nil {
  93. return s.err
  94. }
  95. dirs, err := s.store.Dirs(req.Blacklist)
  96. res.Dirs = dirs
  97. return err
  98. }