package main
import (
"fmt"
"github.com/gogf/gf/g/encoding/gjson"
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
"time"
)
var (
myClients = map[*gtcp.Conn]string{}
)
func main() {
gtcp.NewServer(":12345", func(conn *gtcp.Conn) {
defer conn.Close()
for {
data, err := conn.Recv(-1)
fmt.Println(string(data), err)
if len(data) > 0 {
if j, err := gjson.DecodeToJson(data); err != nil {
glog.Error(err)
} else {
operate := j.GetString("operate")
switch operate {
case "register":
uuid := j.GetString("uuid")
myClients[conn] = uuid
conn.Send(data)
break
case "anything":
if j, err := gjson.DecodeToJson([]byte("{}")); err != nil {
glog.Error(err)
} else {
j.Set("operate", "anything")
j.Set("result", true)
c, _ := j.ToJson()
if err := conn.Send(c); err != nil {
fmt.Println(err, "anything send error")
}
}
break
case "do_anything":
uuid := j.GetString("uuid")
if j, err := gjson.DecodeToJson([]byte("{}")); err != nil {
glog.Error(err)
} else {
j.Set("operate", "do_anything")
j.Set("timestamp", time.Now().Unix())
c, _ := j.ToJson()
for connect, uid := range myClients {
fmt.Println(uid == uuid,uid,"<>",uuid)
if uid == uuid {
isSend := connect.Send(c)
fmt.Println("send to " + uuid, isSend)
}
}
}
break
case "stop":
uuid := j.GetString("uuid")
for connect, uid := range myClients {
if uid == uuid {
connect.Close()
fmt.Println("close to " + uuid)
}
}
break
}
}
}
if err != nil {
fmt.Println(err, err.Error() == "EOF")
//关闭终端则移除设备
if err.Error() == "EOF" {
fmt.Println(myClients[conn], "exist", myClients)
if _, ok := myClients[conn]; ok {
delete(myClients, conn)
fmt.Println("remove")
}
}
break
}
}
}).Run()
}
package main
import (
"fmt"
"github.com/gogf/gf/g/encoding/gjson"
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
"time"
)
func main() {
message1 :=
`{
"operate": "register",
"uuid": "123456789"
}`
message2 :=
`{
"operate": "anything",
"content": "content"
}`
message := message1
for {
if conn, err := gtcp.NewPoolConn("127.0.0.1:12345"); err == nil {
if b, err := conn.SendRecv([]byte(message), -1); err == nil {
fmt.Println(string(b), conn.LocalAddr(), conn.RemoteAddr())
if j, err := gjson.DecodeToJson(b); err != nil {
glog.Error(err)
} else {
operate := j.GetString("operate")
if operate == "register" {
message = message2
}
}
} else {
glog.Error(err)
if err.Error() == "EOF" {
break
}
}
conn.Close()
} else {
glog.Error(err)
break
}
time.Sleep(time.Second * 5)
}
}
package main
import (
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
)
func main() {
//"460010100000011", "460010100000012"
message3 := `{"operate": "do_anything", "uuid": "123456789"}`
message4 := `{"operate": "stop", "uuid": "123456789"}`
var message string
message = message4
message = message3
if conn, err := gtcp.NewConn("127.0.0.1:12345"); err == nil {
err := conn.Send([]byte(message))
if err != nil {
glog.Error(err)
}
conn.Close()
} else {
glog.Error(err)
}
}
read tcp 127.0.0.1:12345->127.0.0.1:51803: read: connection reset by peer
read tcp 127.0.0.1:12345->127.0.0.1:51803: read: connection reset by peer false