更新:1、依赖升级
2、module 名称地址
This commit is contained in:
131
cmd/client.go
131
cmd/client.go
@@ -3,19 +3,17 @@ package cmd
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/go-basic/uuid"
|
||||
"io"
|
||||
"unicode/utf8"
|
||||
|
||||
//"github.com/go-basic/uuid"
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-basic/uuid"
|
||||
)
|
||||
|
||||
type ZHubClient struct {
|
||||
@@ -289,7 +287,11 @@ func (r Rpc) backTopic() string {
|
||||
return strings.Split(r.Ruk, "::")[0]
|
||||
}
|
||||
|
||||
func (c ZHubClient) Rpc(topic string, message string, back func(res RpcResult)) {
|
||||
func (c *ZHubClient) Rpc(topic string, message string, back func(res RpcResult)) {
|
||||
c.RpcWithTimeout(topic, message, time.Second*15, back)
|
||||
}
|
||||
|
||||
func (c *ZHubClient) RpcWithTimeout(topic string, message string, timeout time.Duration, back func(res RpcResult)) {
|
||||
rpc := Rpc{
|
||||
Ruk: c.appname + "::" + uuid.New(),
|
||||
Topic: topic,
|
||||
@@ -310,7 +312,7 @@ func (c ZHubClient) Rpc(topic string, message string, back func(res RpcResult))
|
||||
select {
|
||||
case <-rpc.Ch:
|
||||
// ch 事件(rpc 返回)
|
||||
case <-time.After(time.Second * 15):
|
||||
case <-time.After(timeout):
|
||||
// rpc 超时
|
||||
x, _ := json.Marshal(rpc)
|
||||
log.Println("rpc timeout:", x)
|
||||
@@ -323,7 +325,7 @@ func (c ZHubClient) Rpc(topic string, message string, back func(res RpcResult))
|
||||
}
|
||||
|
||||
// RpcSubscribe rpc subscribe
|
||||
func (c ZHubClient) RpcSubscribe(topic string, fun func(Rpc Rpc) RpcResult) {
|
||||
func (c *ZHubClient) RpcSubscribe(topic string, fun func(Rpc Rpc) RpcResult) {
|
||||
c.Subscribe(topic, func(v string) {
|
||||
rpc := Rpc{}
|
||||
err := json.Unmarshal([]byte(v), &rpc)
|
||||
@@ -449,118 +451,3 @@ func (c *ZHubClient) receive() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------- hm --------------------------------------
|
||||
|
||||
// ==============================================================================
|
||||
|
||||
var reconnect = 0
|
||||
|
||||
// ClientRun client 命令行程序
|
||||
func ClientRun(addr string) {
|
||||
conn, err := net.Dial("tcp", fmt.Sprintf("%s", addr))
|
||||
|
||||
for {
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
time.Sleep(time.Second * 3)
|
||||
conn, err = net.Dial("tcp", fmt.Sprintf("%s", addr))
|
||||
continue
|
||||
}
|
||||
|
||||
fmt.Println(fmt.Sprintf("had connected server: %s", addr))
|
||||
break
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if reconnect == 1 {
|
||||
conn.Close()
|
||||
ClientRun(addr)
|
||||
}
|
||||
}()
|
||||
|
||||
go clientRead(conn)
|
||||
|
||||
for {
|
||||
inReader := bufio.NewReader(os.Stdin)
|
||||
line, err := inReader.ReadString('\n')
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
} else if reconnect == 1 {
|
||||
return
|
||||
}
|
||||
|
||||
line = strings.Trim(line, "\r\n")
|
||||
line = strings.Trim(line, "\n")
|
||||
line = strings.Trim(line, " ")
|
||||
|
||||
if strings.EqualFold(line, "") {
|
||||
continue
|
||||
} else if strings.EqualFold(line, ":exit") {
|
||||
fmt.Println("exit!")
|
||||
return
|
||||
}
|
||||
|
||||
//fmt.Println("发送数据:" + line)
|
||||
|
||||
line = strings.ReplaceAll(line, " ", "")
|
||||
parr := strings.Split(line, " ")
|
||||
conn.Write([]byte("*" + strconv.Itoa(len(parr)) + "\r\n"))
|
||||
for i := range parr {
|
||||
conn.Write([]byte("$" + strconv.Itoa(len(parr[i])) + "\r\n"))
|
||||
conn.Write([]byte(parr[i] + "\r\n"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func clientRead(conn net.Conn) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
fmt.Println("Recovered:", r)
|
||||
}
|
||||
reconnect = 1
|
||||
}()
|
||||
|
||||
reader := bufio.NewReader(conn)
|
||||
for {
|
||||
rcmd := make([]string, 0)
|
||||
line, _, err := reader.ReadLine()
|
||||
if err != nil {
|
||||
log.Println("connection error: ", err)
|
||||
return
|
||||
} else if len(line) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
switch string(line[:1]) {
|
||||
case "*":
|
||||
n, _ := strconv.Atoi(string(line[1:]))
|
||||
for i := 0; i < n; i++ {
|
||||
reader.ReadLine()
|
||||
v, _, _ := reader.ReadLine()
|
||||
rcmd = append(rcmd, string(v))
|
||||
}
|
||||
case "+":
|
||||
rcmd = append(rcmd, string(line))
|
||||
case "-":
|
||||
rcmd = append(rcmd, string(line))
|
||||
case ":":
|
||||
rcmd = append(rcmd, string(line))
|
||||
case "h":
|
||||
if strings.EqualFold(string(line), "help-start") {
|
||||
for {
|
||||
v, _, _ := reader.ReadLine()
|
||||
if strings.EqualFold(string(v), "help-end") {
|
||||
break
|
||||
}
|
||||
rcmd = append(rcmd, string(v)+"\r\n")
|
||||
}
|
||||
}
|
||||
default:
|
||||
rcmd = append(rcmd, string(line))
|
||||
}
|
||||
|
||||
fmt.Println(">", strings.Join(rcmd, " "))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user