123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- package com
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "log"
- "math/rand"
- "os"
- )
- const (
- baseStr = "qwertyuioplkjhgfdsazxcvbnm-0123456789.ZXCVBNMLKJHGFDSAQWERTYUIOP"
- baseStrLen = len(baseStr)
- sockSplitStr = "=="
- sockEndStr = "==END=="
- sockStartStr = "==EVENT:"
- BuffSize = 1024
- SockEndLen = len(sockEndStr)
- SockStartLen = len(sockStartStr)
- SockSplitLen = len(sockSplitStr)
- )
- var (
- SockEndBytes = []byte(sockEndStr)
- SockStartBytes = []byte(sockStartStr)
- SockSplitBytes = []byte(sockSplitStr)
- )
- type Packet struct {
- Event string
- Data []byte
- }
- type ClientConfig struct {
- Protocol string `json:"protocol"`
- Address string `json:"address"`
- Port int `json:"port"`
- Positive bool `json:"positive"`
- Frequency int `json:"frequency"`
- }
- type ServerConfig struct {
- Protocol string `json:"protocol"`
- Port int `json:"port"`
- Gap int `json:"gap"`
- Len int `json:"length"`
- }
- func RandBytesWithHeader() []byte {
- buffer, size := bytes.Buffer{}, rand.Intn(20)+30
- header := fmt.Sprintf("(%d):", size)
- buffer.WriteString(header)
- buffer.Write(RandBytes(size - len(header)))
- return buffer.Bytes()
- }
- func RandBytes(size int) []byte {
- res := make([]byte, size)
- for i := range res {
- res[i] = baseStr[rand.Intn(baseStrLen)]
- }
- return res
- }
- func UintToBytes(num uint) []byte {
- res := make([]byte, 4)
- res[0], res[1] = byte(num>>24), byte((num&0x00ff0000)>>16)
- res[2], res[3] = byte((num&0x0000ff00)>>8), byte(num&0x000000ff)
- return res
- }
- func BytesToUint(from []byte) uint {
- return uint(from[0])<<24 + uint(from[1])<<16 + uint(from[2])<<8 + uint(from[3])
- }
- func IntToBytes(num uint) []byte {
- res := make([]byte, 4)
- res[0], res[1] = byte(num>>24), byte((num&0x00ff0000)>>16)
- res[2], res[3] = byte((num&0x0000ff00)>>8), byte(num&0x000000ff)
- return res
- }
- func BytesToInt(from []byte) int {
- return int(from[0])<<24 + int(from[1])<<16 + int(from[2])<<8 + int(from[3])
- }
- func ReadClientConfig(filepath string, logger *log.Logger) ClientConfig {
- defaultConfig := ClientConfig{
- Protocol: "tcp",
- Address: "192.168.1.6:3060",
- Port: 3080,
- Positive: false,
- Frequency: 1,
- }
- file, err := os.Open(filepath)
- if err != nil {
- logger.Print("File open error:", err)
- return defaultConfig
- }
- defer func() {
- err = file.Close()
- if err != nil {
- logger.Print("Fail to close config file:", err)
- }
- }()
- decoder := json.NewDecoder(file)
- var config ClientConfig
- err = decoder.Decode(&config)
- if err != nil {
- logger.Print("Json decode error:", err)
- return defaultConfig
- }
- return config
- }
- func ReadServerConfig(filepath string, logger *log.Logger) ServerConfig {
- defaultConfig := ServerConfig{
- Protocol: "tcp",
- Port: 3060,
- Gap: 30,
- Len: 30,
- }
- file, err := os.Open(filepath)
- if err != nil {
- logger.Print("File open error:", err)
- return defaultConfig
- }
- defer func() {
- err = file.Close()
- if err != nil {
- logger.Print("Fail to close ServerConfig file:", err)
- }
- }()
- decoder := json.NewDecoder(file)
- var config ServerConfig
- err = decoder.Decode(&config)
- if err != nil {
- logger.Print("Json decode error:", err)
- return defaultConfig
- }
- return config
- }
|