64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package zm_proto
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
type Port struct {
|
|
Cmd string // 地址
|
|
PortDesc string // 描述
|
|
ClientPB string //
|
|
ServerPB string
|
|
ConnectType string
|
|
IsPush bool
|
|
Parallel bool
|
|
|
|
Proto *Proto
|
|
}
|
|
|
|
func ParsePort(Proto *Proto, path string) ([]Port, error) {
|
|
bytes, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
mustPort := regexp.MustCompile(`/\*/*Cmd=.+\*/`)
|
|
|
|
result := mustPort.FindAllStringSubmatch(string(bytes), -1)
|
|
//fmt.Println("result", result)
|
|
var ports []Port
|
|
for _, res := range result {
|
|
for _, match := range res {
|
|
match = match[2 : len(match)-2]
|
|
// fmt.Println("match", match)
|
|
var p = Port{Proto: Proto}
|
|
for _, fieldStr := range strings.Split(match, ";") {
|
|
fieldslice := strings.Split(fieldStr, "=")
|
|
if len(fieldslice) != 2 {
|
|
return nil, fmt.Errorf("invalid field: %s, match: %s", fieldStr, match)
|
|
}
|
|
switch fieldslice[0] {
|
|
case "Cmd":
|
|
p.Cmd = fieldslice[1]
|
|
case "PortDesc":
|
|
p.PortDesc = fieldslice[1]
|
|
case "ClientPB":
|
|
p.ClientPB = fieldslice[1]
|
|
case "ServerPB":
|
|
p.ServerPB = fieldslice[1]
|
|
case "ConnectType":
|
|
p.ConnectType = fieldslice[1]
|
|
case "IsPush":
|
|
p.IsPush = fieldslice[1] == "true"
|
|
case "Parallel":
|
|
p.Parallel = fieldslice[1] == "true"
|
|
}
|
|
}
|
|
ports = append(ports, p)
|
|
}
|
|
}
|
|
return ports, nil
|
|
}
|