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 }