Pārlūkot izejas kodu

新增单条命令执行功能

lxg 3 gadi atpakaļ
vecāks
revīzija
d7e2948b9e
2 mainītis faili ar 37 papildinājumiem un 2 dzēšanām
  1. 2 2
      cmd/tools/cli/main.go
  2. 35 0
      gateway/cli/client.go

+ 2 - 2
cmd/tools/cli/main.go

@@ -9,7 +9,7 @@ import (
 )
 
 var (
-	AddrFlag = flag.String("addr", "127.0.0.1:8080", "server address")
+	AddrFlag = flag.String("addr", "192.168.4.169:6567", "server address")
 )
 
 func main() {
@@ -21,4 +21,4 @@ func main() {
 	} else {
 		fmt.Println(err.Error())
 	}
-}
+}

+ 35 - 0
gateway/cli/client.go

@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"context"
 	"encoding/json"
+	"errors"
 	"fmt"
 	byte2 "git.nspix.com/golang/micro/helper/pool/byte"
 	"git.nspix.com/golang/micro/helper/unsafestr"
@@ -177,6 +178,40 @@ func (client *Client) Run() (err error) {
 	return
 }
 
+func ExecuteContext(ctx context.Context, conn net.Conn, cmd string) (s string, err error) {
+	if ctx == nil {
+		ctx = context.Background()
+	}
+	cli := &Client{
+		conn:          conn,
+		context:       ctx,
+		readyChan:     make(chan struct{}),
+		completerChan: make(chan *Frame),
+		responseChan:  make(chan *Frame, 1),
+	}
+	if err = cli.writePack(&Frame{
+		Type: PacketTypeEcho,
+	}); err != nil {
+		return
+	}
+	frame := &Frame{}
+	if frame, err = readFrame(conn); err != nil {
+		return
+	}
+	if err = cli.writePack(&Frame{Type: PacketTypeData, Data: []byte(cmd)}); err != nil {
+		return
+	}
+	if frame, err = readFrame(conn); err != nil {
+		return
+	}
+	if frame.Error != "" {
+		err = errors.New(frame.Error)
+	} else {
+		s = string(frame.Data)
+	}
+	return
+}
+
 func OpenInteractive(ctx context.Context, conn net.Conn) (err error) {
 	if ctx == nil {
 		ctx = context.Background()