¶Ô±ÈÐÂÎļþ |
| | |
| | | import { getToken } from '@/utils/auth' |
| | | import { generateUUID } from '@/utils/geek'; |
| | | let _client: UniApp.SocketTask; |
| | | let _callback: { [key: string]: (data: any) => void } = {} |
| | | const enableJSON = true // å¼å¯JSONè§£ææ¶æ¯ï¼éè¦å¼å¯JSONè§£ææ¶æ¯æè½å¼å¯uuidåevent |
| | | const enableJSONEncoding = true // å¼å¯JSONæ¶æ¯ç¼ç |
| | | const enableUUID = true // éè¦æ¥æ¶ä¿¡æ¯ä¸å
å«uuidåæ®µï¼uuidä¼å
级é«äºevent |
| | | const enableEvent = true // éè¦æ¥æ¶ä¿¡æ¯ä¸å
å«eventåæ®µ |
| | | |
| | | |
| | | export interface SocketConnectConfig extends UniApp.ConnectSocketOption { |
| | | headers: { |
| | | isToken: boolean |
| | | } |
| | | } |
| | | |
| | | export default { |
| | | /** |
| | | * è¿æ¥websocket |
| | | * æç®åçç¨æ³å°±æ¯ä¼ å
¥{url:"ws://demo"} |
| | | * å½è¿æ¥æåå触ååè°å½æ° |
| | | */ |
| | | connect(config: SocketConnectConfig) { |
| | | return new Promise((resolve, reject) => { |
| | | const isToken = (config.headers || {}).isToken === false |
| | | config.header = config.header || { 'content-type': 'application/json' } |
| | | if (getToken() && !isToken) { |
| | | config.header['Authorization'] = 'Bearer ' + getToken() |
| | | } |
| | | if(_client !== undefined){ |
| | | _client.close({}) |
| | | } |
| | | _client = uni.connectSocket({ |
| | | url: config.url, |
| | | header: config.header, |
| | | method: config.method || 'GET', |
| | | fail: reject |
| | | }); |
| | | _client.onError(reject) |
| | | _client.onOpen(resolve) |
| | | _client.onMessage(res => { |
| | | if(enableJSON){ |
| | | let data = JSON.parse((res || {}).data) |
| | | if (enableUUID && (data || {}).uuid !== undefined) { |
| | | _callback[data.uuid](data) |
| | | } else if (enableEvent && (data || {}).event !== undefined) { |
| | | _callback[data.event](data) |
| | | } |
| | | } |
| | | }) |
| | | }) |
| | | }, |
| | | /** |
| | | * åéä¿¡æ¯ |
| | | * @param msg æ¶æ¯ï¼ä¼è¢«å¤çæjsonå符串 |
| | | * @param uuid å¯ä¸æ è¯,å¯ä»¥ä¼ å
¥uuidï¼ä¹å¯ä»¥ä¼ å
¥trueèªå¨çæuuidï¼flaseè¡¨ç¤ºè¯¥æ¶æ¯ä¸éè¦åç¬å¤ç |
| | | * @returns |
| | | */ |
| | | send(msg: any, uuid: string | boolean = false) { |
| | | return new Promise((resolve, reject) => { |
| | | if(enableJSONEncoding){ |
| | | msg = JSON.stringify(msg) |
| | | } |
| | | if (enableUUID && uuid != undefined && uuid != "" && uuid != false) { |
| | | if (uuid === true) { |
| | | msg.uuid = generateUUID() |
| | | _callback[msg.uuid] = resolve |
| | | } else { |
| | | _callback[uuid] = resolve |
| | | } |
| | | } |
| | | _client.send({ |
| | | data: JSON.stringify(msg), |
| | | fail: reject |
| | | }) |
| | | }) |
| | | }, |
| | | /** |
| | | * å
³éè¿æ¥ |
| | | * @returns å
³éè¿æ¥çPromiseï¼åè°å½æ°åªä¼è¿è¡ä¸æ¬¡ |
| | | */ |
| | | close() { |
| | | return new Promise((resolve, reject) => { |
| | | let onclose = _client.onClose |
| | | _client.onClose(res => { |
| | | resolve(res) |
| | | _client.onClose = onclose |
| | | }) |
| | | _client.close({ |
| | | fail: reject |
| | | }) |
| | | |
| | | }) |
| | | }, |
| | | /** |
| | | * çå¬äºä»¶ |
| | | * @param event è¦çå¬çäºä»¶ |
| | | * @returns å¨åè°å½æ°ä¸å¤çäºä»¶ |
| | | */ |
| | | subscribe(event: string) { |
| | | return new Promise((resolve) => { |
| | | _callback[event] = resolve |
| | | }) |
| | | }, |
| | | /** |
| | | * åæ¶çå¬äºä»¶ |
| | | * @param event è¦åæ¶çå¬çäºä»¶ |
| | | */ |
| | | unsubscribe(event: string) { |
| | | delete _callback[event] |
| | | }, |
| | | /** |
| | | * å®ä¹é»è®¤çå¬äºä»¶ |
| | | * @param callback é»è®¤çå¬äºä»¶çå¤ç彿° |
| | | */ |
| | | onMessage(callback: (data: any) => void) { |
| | | _client.onMessage(res => { |
| | | if(enableJSON){ |
| | | let data = JSON.parse((res || {}).data) |
| | | if (enableUUID && (data || {}).uuid !== undefined) { |
| | | _callback[data.uuid](res) |
| | | delete _callback[data.uuid] |
| | | } else if (enableEvent && (data || {}).event !== undefined) { |
| | | _callback[data.event](res) |
| | | } else { |
| | | callback(data) |
| | | } |
| | | }else{ |
| | | callback(res.data) |
| | | } |
| | | }) |
| | | }, |
| | | /** |
| | | * å®ä¹å¼å¸¸äºä»¶ |
| | | * @param callback é»è®¤å¼å¸¸äºä»¶çå¤ç彿° |
| | | */ |
| | | onError(callback: (data: any) => void) { |
| | | _client.onError(callback) |
| | | }, |
| | | /** |
| | | * å®ä¹å
³éäºä»¶ |
| | | * @param callback é»è®¤å
³éäºä»¶çå¤ç彿° |
| | | */ |
| | | onClose(callback: () => void) { |
| | | _client.onError(callback) |
| | | } |
| | | }; |