53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package client
|
|
|
|
import (
|
|
"github.com/gorilla/websocket"
|
|
"github.com/kercylan98/minotaur/server"
|
|
)
|
|
|
|
// NewWebsocket 创建 websocket 客户端
|
|
func NewWebsocket(addr string) *Client {
|
|
return NewClient(&Websocket{
|
|
addr: addr,
|
|
})
|
|
}
|
|
|
|
// Websocket websocket 客户端
|
|
type Websocket struct {
|
|
addr string
|
|
conn *websocket.Conn
|
|
clsoed bool
|
|
}
|
|
|
|
func (slf *Websocket) Run(runState chan<- error, receive func(wst int, packet []byte)) {
|
|
ws, _, err := websocket.DefaultDialer.Dial(slf.addr, nil)
|
|
if err != nil {
|
|
runState <- err
|
|
return
|
|
}
|
|
slf.conn = ws
|
|
runState <- nil
|
|
for !slf.clsoed {
|
|
messageType, packet, readErr := ws.ReadMessage()
|
|
if readErr != nil {
|
|
panic(readErr)
|
|
}
|
|
receive(messageType, packet)
|
|
}
|
|
}
|
|
|
|
func (slf *Websocket) Write(packet *Packet) error {
|
|
if packet.wst == 0 {
|
|
packet.wst = server.WebsocketMessageTypeBinary
|
|
}
|
|
return slf.conn.WriteMessage(packet.wst, packet.data)
|
|
}
|
|
|
|
func (slf *Websocket) Close() {
|
|
slf.clsoed = true
|
|
}
|
|
|
|
func (slf *Websocket) GetServerAddr() string {
|
|
return slf.addr
|
|
}
|