command_event.go 809 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package libbox
  2. import (
  3. "encoding/binary"
  4. E "github.com/sagernet/sing/common/exceptions"
  5. "github.com/sagernet/sing/common/varbin"
  6. )
  7. type myEvent interface {
  8. writeTo(writer varbin.Writer)
  9. }
  10. func readEvent(reader varbin.Reader) (myEvent, error) {
  11. eventType, err := reader.ReadByte()
  12. if err != nil {
  13. return nil, err
  14. }
  15. switch eventType {
  16. case eventTypeEmpty:
  17. return nil, nil
  18. case eventTypeOpenURL:
  19. url, err := varbin.ReadValue[string](reader, binary.BigEndian)
  20. if err != nil {
  21. return nil, err
  22. }
  23. return &eventOpenURL{URL: url}, nil
  24. default:
  25. return nil, E.New("unknown event type: ", eventType)
  26. }
  27. }
  28. type eventOpenURL struct {
  29. URL string
  30. }
  31. func (e *eventOpenURL) writeTo(writer varbin.Writer) {
  32. writer.WriteByte(eventTypeOpenURL)
  33. varbin.Write(writer, binary.BigEndian, e.URL)
  34. }