You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
voicebot/icsws/client.go

105 lines
2.3 KiB
Go

3 years ago
package icsws
import (
"net/url"
"github.com/gorilla/websocket"
"gitlab.com/cinnamon/voiceagent/icserror"
)
type WSClient struct {
Conn *websocket.Conn
configStr string
}
func NewWSClient(host, path string) *WSClient {
client := WSClient{}
u := url.URL{Scheme: "ws", Host: host, Path: path}
client.configStr = u.String()
return &client
}
func (client *WSClient) Connect() *icserror.IcsError {
conn, _, err := websocket.DefaultDialer.Dial(client.configStr, nil)
//conn, resp, err := websocket.DefaultDialer.Dial(client.configStr, nil)
if err != nil {
icserror.ICSERRWEBSOCKETConnectFailError.SetError(err)
//fmt.Println(resp)
return icserror.ICSERRWEBSOCKETConnectFailError
}
client.Conn = conn
return nil
}
func (client *WSClient) Close() *icserror.IcsError {
if client.Conn == nil {
return icserror.ICSERRWEBSOCKETNotConnectError
}
err := client.Conn.Close()
if err != nil {
icserror.ICSERRWEBSOCKETNotClose.SetError(err)
return icserror.ICSERRWEBSOCKETNotClose
}
return nil
}
func (client WSClient) Read() ([]byte, *icserror.IcsError) {
if client.Conn == nil {
return nil, icserror.ICSERRWEBSOCKETNotConnectError
//return []byte(""), icserror.ICSERRWEBSOCKETNotConnectError
}
mtype, data, err := client.Conn.ReadMessage()
if err != nil {
icserror.ICSERRWEBSOCKETReadError.SetError(err)
return nil, icserror.ICSERRWEBSOCKETReadError
//return []byte(""), icserror.ICSERRWEBSOCKETReadError
}
if mtype != 1 { //only text type
return nil, icserror.ICSERRWEBSOCKETSupportedMsgType
}
return data, nil
}
func (client WSClient) Write(message string) *icserror.IcsError {
if client.Conn == nil {
return icserror.ICSERRWEBSOCKETNotConnectError
}
if len(message) <= 0 {
return icserror.ICSERRInvalidParam
}
err := client.Conn.WriteMessage(1, []byte(message))
if err != nil {
icserror.ICSERRWEBSOCKETWriteError.SetError(err)
return icserror.ICSERRWEBSOCKETWriteError
}
return nil
}
func (client WSClient) WriteData(data []byte) *icserror.IcsError {
if client.Conn == nil {
return icserror.ICSERRWEBSOCKETNotConnectError
}
if len(data) <= 0 {
return icserror.ICSERRInvalidParam
}
err := client.Conn.WriteMessage(1, data)
if err != nil {
icserror.ICSERRWEBSOCKETWriteError.SetError(err)
return icserror.ICSERRWEBSOCKETWriteError
}
return nil
}