command_power.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package libbox
  2. import (
  3. "encoding/binary"
  4. "net"
  5. "github.com/sagernet/sing/common/varbin"
  6. )
  7. func (c *CommandClient) ServiceReload() error {
  8. conn, err := c.directConnect()
  9. if err != nil {
  10. return err
  11. }
  12. defer conn.Close()
  13. err = binary.Write(conn, binary.BigEndian, uint8(CommandServiceReload))
  14. if err != nil {
  15. return err
  16. }
  17. return readError(conn)
  18. }
  19. func (s *CommandServer) handleServiceReload(conn net.Conn) error {
  20. rErr := s.handler.ServiceReload()
  21. err := binary.Write(conn, binary.BigEndian, rErr != nil)
  22. if err != nil {
  23. return err
  24. }
  25. if rErr != nil {
  26. return varbin.Write(conn, binary.BigEndian, rErr.Error())
  27. }
  28. return nil
  29. }
  30. func (c *CommandClient) ServiceClose() error {
  31. conn, err := c.directConnect()
  32. if err != nil {
  33. return err
  34. }
  35. defer conn.Close()
  36. err = binary.Write(conn, binary.BigEndian, uint8(CommandServiceClose))
  37. if err != nil {
  38. return err
  39. }
  40. return readError(conn)
  41. }
  42. func (s *CommandServer) handleServiceClose(conn net.Conn) error {
  43. rErr := s.service.Close()
  44. s.handler.PostServiceClose()
  45. err := binary.Write(conn, binary.BigEndian, rErr != nil)
  46. if err != nil {
  47. return err
  48. }
  49. if rErr != nil {
  50. return varbin.Write(conn, binary.BigEndian, rErr.Error())
  51. }
  52. return nil
  53. }