Feat: finish multi interface parser and make the cli app work

This commit is contained in:
kayos@tcp.direct 2023-12-01 23:25:44 -08:00
parent 707a82e2a6
commit 2e7b11999c
Signed by: kayos
GPG Key ID: 4B841471B4BEE979
2 changed files with 27 additions and 9 deletions

@ -11,7 +11,7 @@ import (
)
func main() {
eth0 := &iface.NetworkInterface{}
ifaces := iface.NewMultiParser()
switch {
case len(os.Args) < 2:
buf := &bytes.Buffer{}
@ -31,7 +31,7 @@ func main() {
break
}
}
n, err := eth0.Write(buf.Bytes())
n, err := ifaces.Write(buf.Bytes())
if err != nil {
panic(err)
}
@ -43,7 +43,7 @@ func main() {
if err != nil {
panic(err)
}
n, err := eth0.Write(dat)
n, err := ifaces.Write(dat)
if err != nil {
panic(err)
}
@ -51,12 +51,22 @@ func main() {
panic("short write")
}
}
dat, err := json.MarshalIndent(eth0, "", "\t")
imap, err := ifaces.Parse()
if err != nil {
panic(err)
}
if err = eth0.Validate(); err != nil {
println(err.Error())
return
}
for _, netif := range imap {
if netif == nil {
continue
}
if err = netif.Validate(); err != nil {
println(netif.Name + " skip due to error: " + err.Error())
delete(imap, netif.Name)
continue
}
}
dat, err := json.MarshalIndent(imap, "", "\t")
_, _ = os.Stdout.Write(dat)
}

@ -9,6 +9,8 @@ import (
"git.tcp.direct/kayos/common/pool"
)
type Interfaces map[string]*NetworkInterface
type poolGroup struct {
Buffers pool.BufferFactory
Strs pool.StringFactory
@ -20,22 +22,28 @@ type MultiParser struct {
Interfaces map[string]*NetworkInterface
Errs []error
buf []byte
mu *sync.Mutex
}
func NewMultiParser() *MultiParser {
return &MultiParser{
Interfaces: make(map[string]*NetworkInterface),
Interfaces: make(Interfaces),
Errs: make([]error, 0),
buf: make([]byte, 0),
mu: &sync.Mutex{},
}
}
func (p *MultiParser) Write(data []byte) (int, error) {
p.mu.Lock()
p.buf = append(p.buf, data...)
p.mu.Unlock()
return len(data), nil
}
func (p *MultiParser) Parse() error {
func (p *MultiParser) Parse() (Interfaces, error) {
p.mu.Lock()
defer p.mu.Unlock()
scanner := bufio.NewScanner(strings.NewReader(string(p.buf)))
index := 0