| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- package libbox
 
- import (
 
- 	"encoding/binary"
 
- 	"net"
 
- 	E "github.com/sagernet/sing/common/exceptions"
 
- 	"github.com/sagernet/sing/common/varbin"
 
- )
 
- func (c *CommandClient) ServiceReload() error {
 
- 	conn, err := c.directConnect()
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	defer conn.Close()
 
- 	err = binary.Write(conn, binary.BigEndian, uint8(CommandServiceReload))
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	var hasError bool
 
- 	err = binary.Read(conn, binary.BigEndian, &hasError)
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	if hasError {
 
- 		errorMessage, err := varbin.ReadValue[string](conn, binary.BigEndian)
 
- 		if err != nil {
 
- 			return err
 
- 		}
 
- 		return E.New(errorMessage)
 
- 	}
 
- 	return nil
 
- }
 
- func (s *CommandServer) handleServiceReload(conn net.Conn) error {
 
- 	rErr := s.handler.ServiceReload()
 
- 	err := binary.Write(conn, binary.BigEndian, rErr != nil)
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	if rErr != nil {
 
- 		return varbin.Write(conn, binary.BigEndian, rErr.Error())
 
- 	}
 
- 	return nil
 
- }
 
- func (c *CommandClient) ServiceClose() error {
 
- 	conn, err := c.directConnect()
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	defer conn.Close()
 
- 	err = binary.Write(conn, binary.BigEndian, uint8(CommandServiceClose))
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	var hasError bool
 
- 	err = binary.Read(conn, binary.BigEndian, &hasError)
 
- 	if err != nil {
 
- 		return nil
 
- 	}
 
- 	if hasError {
 
- 		errorMessage, err := varbin.ReadValue[string](conn, binary.BigEndian)
 
- 		if err != nil {
 
- 			return nil
 
- 		}
 
- 		return E.New(errorMessage)
 
- 	}
 
- 	return nil
 
- }
 
- func (s *CommandServer) handleServiceClose(conn net.Conn) error {
 
- 	rErr := s.service.Close()
 
- 	s.handler.PostServiceClose()
 
- 	err := binary.Write(conn, binary.BigEndian, rErr != nil)
 
- 	if err != nil {
 
- 		return err
 
- 	}
 
- 	if rErr != nil {
 
- 		return varbin.Write(conn, binary.BigEndian, rErr.Error())
 
- 	}
 
- 	return nil
 
- }
 
 
  |