Files

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
}