agent/websocket/WebsocketClient.go (66 lines of code) (raw):

package websocket import ( "errors" "fmt" "github.com/aliyun/aliyun_assist_client/agent/log" "github.com/aliyun/aliyun_assist_client/agent/util" "github.com/gorilla/websocket" ) var g_conn *websocket.Conn = nil var g_closeEvent chan struct{} = nil var g_WaitingReply bool = false func connectWebsocketServer() error { if g_conn != nil { return nil } host := util.GetServerHost() if host == "" { return errors.New("GetServerHost error") } url := "ws://" + host + "/echo" c, _, err := websocket.DefaultDialer.Dial(url, nil) if err != nil { return err } g_conn = c log.GetLogger().Println("connectWebsocketServer ok:", url) return nil } func DisconnectWebsocketServer() { if g_conn == nil { return } //客户端主动断开连接 log.GetLogger().Println("call DisconnectWebsocketServer") err := g_conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) if err != nil { log.GetLogger().Println("write close:", err) } } func SendMsgToWebsocketServer(msg string) error { err := connectWebsocketServer() if err != nil { return err } if !g_WaitingReply { go func() { g_WaitingReply = true for { _, message, err := g_conn.ReadMessage() if err != nil { g_WaitingReply = false //客户端调用DisconnectWebsocketServer、服务端断开、网络异常,都会走到这里 // MyInfo.Println("ReadMessage error, close conn:", err) g_conn.Close() g_conn = nil return } fmt.Printf("recv: %s", message) // ResponseHandler(string(message), false) } }() } return g_conn.WriteMessage(websocket.TextMessage, []byte(msg)) } func ReplyMsgToWebsocketServer(msg string) error { if g_conn == nil { return errors.New("websocket conn disconnected") } return g_conn.WriteMessage(websocket.TextMessage, []byte(msg)) }