websocket-client
package main
import (
"encoding/json"
"fmt"
"log"
"net/url"
"sync"
"time"
"github.com/gorilla/websocket"
)
var mutex sync.Mutex
func main() {
// u := url.URL{Scheme: "ws", Host: "8.136.204.163:8000"}
u := url.URL{Scheme: "ws", Host: "localhost:8001"}
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatalf("%+v", err)
}
defer c.Close()
// c.SetCloseHandler(func(code int, text string) error {
// fmt.Printf("SetCloseHandler %d:%s", code, text)
// // message := websocket.FormatCloseMessage(code, "")
// // c.WriteControl(CloseMessage, message, time.Now().Add(writeWait))
// return nil
// })
// c.SetPingHandler(func(appData string) error {
// fmt.Printf("SetPingHandler %s", appData)
// return nil
// })
// c.SetPongHandler(func(appData string) error {
// fmt.Printf("SetPingHandler %s", appData)
// return nil
// })
pingParam := make(map[string]interface{})
pingParam["msgId"] = 3
pingParam["action"] = "Heartbeat"
pingData := make(map[string]interface{})
pingData["echo"] = "ping"
pingParam["data"] = pingData
param := make(map[string]interface{})
param["msgId"] = 2
param["action"] = "Login"
data := make(map[string]interface{})
data["authName"] = "taian"
data["authToken"] = "7ee193f504125d7d9e715e0252648856"
data["clientName"] = "taian123"
param["data"] = data
mutex.Lock()
c.WriteJSON(param)
mutex.Unlock()
// res := make(map[string]interface{})
// err1 := c.ReadJSON(&res)
// if err1 != nil {
// fmt.Printf("%+v\n", err1)
// log.Fatalln(err1)
// }
// bs, _ := json.Marshal(res)
// log.Printf("%s\n", string(bs))
// mutex.Lock()
// err0 := c.WriteJSON(pingParam)
// mutex.Unlock()
// if err0 != nil {
// log.Fatalf("写ping命令ERR:%+v\n", err1)
// }
// res = make(map[string]interface{})
// err1 = c.ReadJSON(&res)
// if err1 != nil {
// log.Fatalf("读ping命令ERR: %+v\n", err1)
// }
// bs, _ = json.Marshal(res)
// log.Printf("%s\n", string(bs))
go func() {
t := time.NewTicker(time.Second * 4)
defer t.Stop()
for {
<-t.C
mutex.Lock()
c.WriteJSON(pingParam)
mutex.Unlock()
}
}()
go func() {
for {
res := make(map[string]interface{})
err1 := c.ReadJSON(&res)
if err1 != nil {
fmt.Printf("%+v\n", err1)
continue
}
bs, _ := json.Marshal(res)
log.Printf("%s\n", string(bs))
}
}()
// param["action"] = "GetDevice"
// data = make(map[string]interface{})
// data["index"] = 1
// data["count"] = -1
param0 := make(map[string]interface{})
param0["msgId"] = 4
param0["action"] = "RegDeviceData"
data0 := make(map[string]interface{})
data0["names"] = []string{"S01"}
data0["count"] = 1
param0["data"] = data0
mutex.Lock()
err0 := c.WriteJSON(param0)
mutex.Unlock()
if err0 != nil {
log.Fatalf("%+v", err0)
}
param1 := make(map[string]interface{})
param1["msgId"] = 4
param1["action"] = "GetRealDeviceData"
data1 := make(map[string][]string)
data1["names"] = []string{"S01"}
param1["data"] = data1
mutex.Lock()
err1 := c.WriteJSON(param1)
mutex.Unlock()
if err1 != nil {
log.Fatalf("%+v", err1)
}
select {}
}