123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- const _WEBSOCKET = {
- //是否打开连接
- isOpen: false,
- //连接socket. https://ask.dcloud.net.cn/question/74505
- connectSocket(url, recvMsgFunc = null, successFunc = null, errorFunc = null) {
- try {
- let that = this
- //监听socket连接
- uni.onSocketOpen((res) => {
- console.log('WebSocket连接已打开!', url, res)
- that.isOpen = true
- successFunc && successFunc(res)
- })
- //监听socket连接失败
- uni.onSocketError((res) => {
- that.isOpen = false
- console.log('WebSocket连接打开失败,请检查!', url, res)
- errorFunc && errorFunc(res)
- })
- //监听收到消息
- uni.onSocketMessage((res) => {
- console.log('收到服务器内容:' + res.data, url)
- //可结合服务端@OnOpen返回消息OK来进行判断是否已经打开连接
- if(res.data === 'OK') {
- console.log('WebSocket连接已打开!', url, res)
- that.isOpen = true
- successFunc && successFunc(res)
- return
- }
- recvMsgFunc && recvMsgFunc(res.data)
- })
- //监听socket关闭
- uni.onSocketClose((res) => {
- console.log('WebSocket 已关闭!', url)
- that.isOpen = false
- })
-
- //连接socket
- setTimeout(() => {
- // 防止还没监听到onSocketOpen就已经完成连接
- uni.connectSocket({
- url,
- success() {
- if (that.isOpen) {
- console.log('Websocket连接已打开,刷新状态完成!', url)
- } else {
- console.log('Websocket初始化成功!正在监听连接打开状态...', url)
- }
- }
- })
- }, 100)
- } catch (error) {
- console.log('err:' + error)
- }
- },
- //发送消息
- sendMessage(msg = '', successFunc = null, errorFunc = null) {
- if (!msg) {
- console.log('未传消息!')
- errorFunc && errorFunc('未传消息!')
- return
- }
- if (!this.isOpen) {
- console.log('连接未打开!')
- errorFunc && errorFunc('连接未打开!')
- return
- }
- uni.sendSocketMessage({
- data: msg,
- success(res) {
- console.log('消息发送成功!', msg)
- successFunc && successFunc(res)
- },
- fail(err) {
- console.log('消息发送失败!', msg)
- errorFunc && errorFunc(err)
- }
- })
- },
- //关闭连接
- closeSocket() {
- if (!this.isOpen) {
- return
- }
- //关闭socket连接
- uni.closeSocket()
- }
- }
- export default _WEBSOCKET
|