Common.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package com
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "log"
  7. "math/rand"
  8. "os"
  9. )
  10. const (
  11. baseStr = "qwertyuioplkjhgfdsazxcvbnm-0123456789.ZXCVBNMLKJHGFDSAQWERTYUIOP"
  12. baseStrLen = len(baseStr)
  13. sockSplitStr = "=="
  14. sockEndStr = "==END=="
  15. sockStartStr = "==EVENT:"
  16. BuffSize = 1024
  17. SockEndLen = len(sockEndStr)
  18. SockStartLen = len(sockStartStr)
  19. SockSplitLen = len(sockSplitStr)
  20. )
  21. var (
  22. SockEndBytes = []byte(sockEndStr)
  23. SockStartBytes = []byte(sockStartStr)
  24. SockSplitBytes = []byte(sockSplitStr)
  25. )
  26. type Packet struct {
  27. Event string
  28. Data []byte
  29. }
  30. type ClientConfig struct {
  31. Protocol string `json:"protocol"`
  32. Address string `json:"address"`
  33. Port int `json:"port"`
  34. Positive bool `json:"positive"`
  35. Frequency int `json:"frequency"`
  36. }
  37. type ServerConfig struct {
  38. Protocol string `json:"protocol"`
  39. Port int `json:"port"`
  40. Gap int `json:"gap"`
  41. Len int `json:"length"`
  42. }
  43. func RandBytesWithHeader() []byte {
  44. buffer, size := bytes.Buffer{}, rand.Intn(20)+30
  45. header := fmt.Sprintf("(%d):", size)
  46. buffer.WriteString(header)
  47. buffer.Write(RandBytes(size - len(header)))
  48. return buffer.Bytes()
  49. }
  50. func RandBytes(size int) []byte {
  51. res := make([]byte, size)
  52. for i := range res {
  53. res[i] = baseStr[rand.Intn(baseStrLen)]
  54. }
  55. return res
  56. }
  57. func UintToBytes(num uint) []byte {
  58. res := make([]byte, 4)
  59. res[0], res[1] = byte(num>>24), byte((num&0x00ff0000)>>16)
  60. res[2], res[3] = byte((num&0x0000ff00)>>8), byte(num&0x000000ff)
  61. return res
  62. }
  63. func BytesToUint(from []byte) uint {
  64. return uint(from[0])<<24 + uint(from[1])<<16 + uint(from[2])<<8 + uint(from[3])
  65. }
  66. func IntToBytes(num uint) []byte {
  67. res := make([]byte, 4)
  68. res[0], res[1] = byte(num>>24), byte((num&0x00ff0000)>>16)
  69. res[2], res[3] = byte((num&0x0000ff00)>>8), byte(num&0x000000ff)
  70. return res
  71. }
  72. func BytesToInt(from []byte) int {
  73. return int(from[0])<<24 + int(from[1])<<16 + int(from[2])<<8 + int(from[3])
  74. }
  75. func ReadClientConfig(filepath string, logger *log.Logger) ClientConfig {
  76. defaultConfig := ClientConfig{
  77. Protocol: "tcp",
  78. Address: "192.168.1.6:3060",
  79. Port: 3080,
  80. Positive: false,
  81. Frequency: 1,
  82. }
  83. file, err := os.Open(filepath)
  84. if err != nil {
  85. logger.Print("File open error:", err)
  86. return defaultConfig
  87. }
  88. defer func() {
  89. err = file.Close()
  90. if err != nil {
  91. logger.Print("Fail to close config file:", err)
  92. }
  93. }()
  94. decoder := json.NewDecoder(file)
  95. var config ClientConfig
  96. err = decoder.Decode(&config)
  97. if err != nil {
  98. logger.Print("Json decode error:", err)
  99. return defaultConfig
  100. }
  101. return config
  102. }
  103. func ReadServerConfig(filepath string, logger *log.Logger) ServerConfig {
  104. defaultConfig := ServerConfig{
  105. Protocol: "tcp",
  106. Port: 3060,
  107. Gap: 30,
  108. Len: 30,
  109. }
  110. file, err := os.Open(filepath)
  111. if err != nil {
  112. logger.Print("File open error:", err)
  113. return defaultConfig
  114. }
  115. defer func() {
  116. err = file.Close()
  117. if err != nil {
  118. logger.Print("Fail to close ServerConfig file:", err)
  119. }
  120. }()
  121. decoder := json.NewDecoder(file)
  122. var config ServerConfig
  123. err = decoder.Decode(&config)
  124. if err != nil {
  125. logger.Print("Json decode error:", err)
  126. return defaultConfig
  127. }
  128. return config
  129. }