mirror of
https://github.com/xxjwxc/public.git
synced 2025-09-27 04:06:03 +08:00
81 lines
1.6 KiB
Go
81 lines
1.6 KiB
Go
package mywebsocket
|
|
|
|
/*
|
|
说明:第一个包 初始化client唯一id。消息id为100
|
|
*/
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/gorilla/websocket"
|
|
"github.com/xxjwxc/public/message"
|
|
"github.com/xxjwxc/public/mylog"
|
|
)
|
|
|
|
type ClientBody struct {
|
|
Code int `json:"code,omitempty"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
}
|
|
|
|
type WSMessageType uint8
|
|
|
|
const (
|
|
WS_Login WSMessageType = 1 // 链接
|
|
WS_Close WSMessageType = 2 // 断线
|
|
)
|
|
|
|
type HandlerReadFunc func(messageType int, p []byte, err error) //ID , MESSAGEID,内容
|
|
|
|
type MyWebSocket struct {
|
|
conn *websocket.Conn
|
|
done chan struct{}
|
|
}
|
|
|
|
//websocket 初始化接口
|
|
/*
|
|
addr 地址,
|
|
path 域
|
|
handlerFunc 读到的消息回调
|
|
stateFunc 连接消息回调
|
|
timeOut 读取超时回调(0则永不超时)
|
|
*/
|
|
func NewWebSocket(url string, handlerFunc HandlerReadFunc, requestHeader http.Header, timeOut time.Duration) (*MyWebSocket, error) {
|
|
myWebSocket := &MyWebSocket{
|
|
conn: nil,
|
|
done: make(chan struct{}),
|
|
}
|
|
|
|
var err error
|
|
var resp *http.Response
|
|
myWebSocket.conn, resp, err = websocket.DefaultDialer.Dial(url, requestHeader)
|
|
if err != nil {
|
|
mylog.Error(resp)
|
|
return nil, err
|
|
}
|
|
|
|
go func() {
|
|
defer close(myWebSocket.done)
|
|
for {
|
|
messageType, message, err := myWebSocket.conn.ReadMessage()
|
|
handlerFunc(messageType, message, err)
|
|
}
|
|
}()
|
|
|
|
return myWebSocket, nil
|
|
}
|
|
|
|
func (wss *MyWebSocket) SendMessage(messageType int, p []byte) error {
|
|
if wss.conn != nil {
|
|
return wss.conn.WriteMessage(messageType, p)
|
|
}
|
|
|
|
return message.GetError(message.EmptyError)
|
|
}
|
|
|
|
func (wss *MyWebSocket) Close() {
|
|
wss.done <- struct{}{}
|
|
if wss.conn != nil {
|
|
wss.conn.Close()
|
|
}
|
|
}
|