72 lines
1.4 KiB
Go
72 lines
1.4 KiB
Go
|
|
package websocketUtil
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"errors"
|
|||
|
|
"fmt"
|
|||
|
|
"sync"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
var (
|
|||
|
|
wsmap sync.Map
|
|||
|
|
errLog func(format string, args ...interface{})
|
|||
|
|
debugLog func(format string, args ...interface{})
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// SetLog
|
|||
|
|
// @Description:设置日志回调函数信息
|
|||
|
|
// @param errLogFun 错误日志回调函数
|
|||
|
|
// @param debugLogFun debug日志回调函数
|
|||
|
|
func SetLog(errLogFun, debugLogFun func(format string, args ...interface{})) {
|
|||
|
|
errLog = errLogFun
|
|||
|
|
debugLog = debugLogFun
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Send
|
|||
|
|
// @Description: 发送数据
|
|||
|
|
// @param wsurl 发送地址
|
|||
|
|
// @param st 发送类型,使用websocket下的定义
|
|||
|
|
// @param data 发送数据
|
|||
|
|
// @return error
|
|||
|
|
func Send(wsurl string, st int, data []byte) error {
|
|||
|
|
if debugLog == nil || errLog == nil {
|
|||
|
|
return errors.New("websocketUtil未设置errLog,debugLog回调函数,请调用websocketUtil.Setlog函数设置相关信息")
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m, err := getOrAdd(wsurl)
|
|||
|
|
if err != nil {
|
|||
|
|
errLog(fmt.Sprintf("websocketUtil.Send error:%s", err))
|
|||
|
|
return err
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
m.send(st, data)
|
|||
|
|
|
|||
|
|
return nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// getOrAdd
|
|||
|
|
// @Description:获取或者添加对象
|
|||
|
|
// @param url string
|
|||
|
|
// @return *model
|
|||
|
|
// @return error
|
|||
|
|
func getOrAdd(url string) (*model, error) {
|
|||
|
|
var m *model
|
|||
|
|
var err error
|
|||
|
|
|
|||
|
|
v, isOk := wsmap.Load(url)
|
|||
|
|
if isOk {
|
|||
|
|
m = v.(*model)
|
|||
|
|
return m, nil
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 不存在,创建对应的socket连接
|
|||
|
|
m, err = newModel(url)
|
|||
|
|
if err != nil {
|
|||
|
|
return nil, err
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 保存到map
|
|||
|
|
wsmap.Store(url, m)
|
|||
|
|
|
|||
|
|
return m, err
|
|||
|
|
}
|