config_json.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // +build json
  2. package kcp
  3. import (
  4. "encoding/json"
  5. )
  6. func (this *Config) UnmarshalJSON(data []byte) error {
  7. type JSONConfig struct {
  8. Mode *string `json:"Mode"`
  9. Mtu *int `json:"MaximumTransmissionUnit"`
  10. Sndwnd *int `json:"SendingWindowSize"`
  11. Rcvwnd *int `json:"ReceivingWindowSize"`
  12. Acknodelay *bool `json:"AcknowledgeNoDelay"`
  13. Dscp *int `json:"Dscp"`
  14. ReadTimeout *int `json:"ReadTimeout"`
  15. WriteTimeout *int `json:"WriteTimeout"`
  16. }
  17. jsonConfig := new(JSONConfig)
  18. if err := json.Unmarshal(data, &jsonConfig); err != nil {
  19. return err
  20. }
  21. if jsonConfig.Mode != nil {
  22. this.Mode = *jsonConfig.Mode
  23. }
  24. if jsonConfig.Mtu != nil {
  25. this.Mtu = *jsonConfig.Mtu
  26. }
  27. if jsonConfig.Sndwnd != nil {
  28. this.Sndwnd = *jsonConfig.Sndwnd
  29. }
  30. if jsonConfig.Rcvwnd != nil {
  31. this.Rcvwnd = *jsonConfig.Rcvwnd
  32. }
  33. if jsonConfig.Acknodelay != nil {
  34. this.Acknodelay = *jsonConfig.Acknodelay
  35. }
  36. if jsonConfig.Dscp != nil {
  37. this.Dscp = *jsonConfig.Dscp
  38. }
  39. if jsonConfig.ReadTimeout != nil {
  40. this.ReadTimeout = *jsonConfig.ReadTimeout
  41. }
  42. if jsonConfig.WriteTimeout != nil {
  43. this.WriteTimeout = *jsonConfig.WriteTimeout
  44. }
  45. return nil
  46. }