diff --git a/npm/index.js b/npm/index.js index 073fdd1..f529af0 100644 --- a/npm/index.js +++ b/npm/index.js @@ -1 +1 @@ -const _0x490c=['setHostAndPort','_password','开始im连接','ios','setItem','request','_user','{\x22text\x22:\x22','has','now','catch','sendTextMsg','messageId','/topic/server','delete','用户信息错误','log','clearInterval','over','map','连接服务器失败::','发送消息失败','message','android','text','debug','_userName','sendSocketMessage','subscribe','SENDACK','_mapMsg','guid','用户id不能为空','----------------------------------------------------','toString','setInterval','56465456','PushBrowserId','连接成功','_port','xuqm','data','web','_client','onMessage','_parseMsg','SEND','onopen','then','_userId','onSocketMessage','socketOpen','http://192.168.115.137:8888/hello/123','packetType','windows','join','sendMessage','_account','_deviceId','onmessage','set','parse','_host','_deviceType','stringify','15774','_connectClient','ws://','mapCall','connectSocket','connect','订阅消息失败::','messageType'];const _0x2a8a=function(_0x490c8f,_0x2a8a05){_0x490c8f=_0x490c8f-0x0;let _0xa7776e=_0x490c[_0x490c8f];return _0xa7776e;};import _0x3c6eb8 from'fingerprintjs2';import _0x574696 from'axios';import _0x54dc79 from'stompjs';class SzyxPushClient{constructor(){this[_0x2a8a('0x44')]=new Map();this[_0x2a8a('0x1e')]=new Map();this[_0x2a8a('0x3e')]=null;this[_0x2a8a('0x27')]=null;this[_0x2a8a('0x3f')]=null;this[_0x2a8a('0x6')]=null;this[_0x2a8a('0x2b')]=null;this['socketOpen']=![];this['ws']={'send':this[_0x2a8a('0x1b')]};}['guid'](){return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'['replace'](/[xy]/g,function(_0x460fee){const _0x38a94a=Math['random']()*0x10|0x0,_0x51ec75=_0x460fee==='x'?_0x38a94a:_0x38a94a&0x3|0x8;return _0x51ec75[_0x2a8a('0x22')](0x10);});}['_parseMsg'](_0x167cf1){let _0x5a2f4a=_0x167cf1[_0x2a8a('0x16')];try{_0x5a2f4a=JSON[_0x2a8a('0x3d')](_0x167cf1['message']);}catch(_0xa51683){}let _0x50b69f='unknown';switch(_0x167cf1['messageType']){case 0x1:_0x50b69f=_0x2a8a('0x18');break;default:_0x50b69f='unknown';break;}return{..._0x167cf1,'message':_0x5a2f4a,'messageType':_0x50b69f};}[_0x2a8a('0x0')](_0x3ff5f4,_0x54b9f1){this['_host']=_0x3ff5f4;this['_port']=_0x54b9f1;}['setDeviceType'](_0x291c45){this['_deviceType']=_0x291c45;}[_0x2a8a('0x2c')](_0x52e7f1){let _0x41d7eb=Math['random']();if(this['mapCall'][_0x2a8a('0x8')](_0x41d7eb))_0x41d7eb=Math['random']();this[_0x2a8a('0x44')][_0x2a8a('0x3c')](_0x41d7eb,_0x52e7f1);return _0x41d7eb;}['unMessage'](_0x4fa1cb){this['mapCall'][_0x2a8a('0xe')](_0x4fa1cb);}[_0x2a8a('0xb')](_0x1ac8ac,_0x231d33){return this[_0x2a8a('0x38')]({'toClientId':_0x1ac8ac,'messageType':0x1,'message':_0x2a8a('0x7')+_0x231d33+'\x22}'});}[_0x2a8a('0x38')](_0x5d063e){return new Promise((_0x12578f,_0x5257cc)=>{let _0x16750c=this[_0x2a8a('0x1f')]();let _0x308d61={'messageId':_0x16750c,'target':this[_0x2a8a('0x6')]['_userId'],'fromClientId':this[_0x2a8a('0x6')]['_userId'],'tenantNo':this[_0x2a8a('0x6')]['_tenantNo'],'timestamp':Date[_0x2a8a('0x9')](),'packetType':_0x2a8a('0x2e'),..._0x5d063e};this['_mapMsg']['set'](_0x16750c,{'call':_0x12578f,'message':_0x308d61});this[_0x2a8a('0x2b')]['send']('/topic/server',{},JSON['stringify'](_0x308d61));setTimeout(()=>{if(this['_mapMsg']['has'](_0x16750c))_0x5257cc({'msg':_0x2a8a('0x15'),'content':this[_0x2a8a('0x2d')](_0x308d61)});this['_mapMsg'][_0x2a8a('0xe')](_0x16750c);},0x1f4);});}[_0x2a8a('0x1b')](_0x80275f){console[_0x2a8a('0x10')](_0x80275f);if(this[_0x2a8a('0x33')]){wx['sendSocketMessage']({'data':_0x80275f});}}['_connectClient'](_0x5279e7,_0x2ad1f7){this[_0x2a8a('0x2b')][_0x2a8a('0x19')]=null;console['log']('----->',_0x2a8a('0x2'));this[_0x2a8a('0x2b')]['connect'](this['_user'][_0x2a8a('0x1a')],this['_user']['_password'],()=>{console['log']('----->',_0x2a8a('0x26'));_0x5279e7();this[_0x2a8a('0x2b')][_0x2a8a('0x1c')]('/topic/'+this['_user'][_0x2a8a('0x31')],_0x387e14=>{const _0x3b58a0=JSON[_0x2a8a('0x3d')](_0x387e14['body']);if(_0x3b58a0[_0x2a8a('0x35')]==='SEND'){this['_client']['send'](_0x2a8a('0xd'),{},JSON[_0x2a8a('0x40')]({'packetType':_0x2a8a('0x1d'),'messageId':_0x3b58a0[_0x2a8a('0xc')]}));for(const _0x89f10b of this['mapCall']['values']()){_0x89f10b(_0x3b58a0[_0x2a8a('0x48')],this[_0x2a8a('0x2d')](_0x3b58a0));}}else if(_0x3b58a0['packetType']==='SENDACK'){const _0x15c158=this['_mapMsg']['get'](_0x3b58a0['messageId']);if(_0x15c158)_0x15c158['call'](this[_0x2a8a('0x2d')](_0x15c158['message']));this['_mapMsg'][_0x2a8a('0xe')](_0x3b58a0[_0x2a8a('0xc')]);}},_0x391351=>_0x2ad1f7(_0x2a8a('0x47')+_0x391351));},_0x43aeb4=>_0x2ad1f7(_0x2a8a('0x14')+_0x43aeb4),'/');}[_0x2a8a('0x46')](_0x195a68){this[_0x2a8a('0x6')]=_0x195a68;return new Promise((_0x5c86b3,_0x582451)=>{if(!this[_0x2a8a('0x3e')]||!this['_port'])_0x582451('环境信息错误');if(!this['_user']||!this[_0x2a8a('0x6')]['_userName']||!this[_0x2a8a('0x6')][_0x2a8a('0x1')])_0x582451(_0x2a8a('0xf'));if(_isWx()){console[_0x2a8a('0x10')](_0x2a8a('0x21'));wx[_0x2a8a('0x45')]({'url':'`ws://${this._host}:${this._port}/ws`'});wx['onSocketOpen'](_0x3ca4ee=>{this[_0x2a8a('0x33')]=!![];this['ws'][_0x2a8a('0x2f')]();});wx[_0x2a8a('0x32')](_0x153c2f=>{this['ws'][_0x2a8a('0x3b')](_0x153c2f);});_0x54dc79[_0x2a8a('0x23')]=(_0xd7ea73,_0x5746b9)=>{return setInterval(_0xd7ea73,_0x5746b9);};_0x54dc79[_0x2a8a('0x11')]=_0x538c2b=>{return clearInterval(_0x538c2b);};this['_client']=_0x54dc79[_0x2a8a('0x12')](this['ws']);}else{this[_0x2a8a('0x2b')]=_0x54dc79['client'](_0x2a8a('0x43')+this[_0x2a8a('0x3e')]+':'+this[_0x2a8a('0x27')]+'/ws');}this[_0x2a8a('0x42')](_0x5c86b3,_0x582451);});}}class SzyxPushUser{constructor(){this['_tenantNo']=null;this[_0x2a8a('0x31')]=null;this[_0x2a8a('0x3a')]=null;this['_account']=null;this['_userName']=null;this['_password']=null;}}let _imClient=new SzyxPushClient();let _imUser=new SzyxPushUser();const _isWx=()=>{return _imClient['_deviceType']===0x6;};const _createFingerprint=()=>{return new Promise(_0x5653d3=>{let _0x371f7d=null;if(_isWx())_0x371f7d=wx['getStorageSync'](_0x2a8a('0x25'));else _0x371f7d=localStorage['getItem']('PushBrowserId');if(_0x371f7d){_0x5653d3(_0x371f7d);}else{_0x3c6eb8['get'](_0x15fde9=>{const _0x23f0c4=_0x15fde9[_0x2a8a('0x13')](function(_0x3c4519,_0x3e9589){if(_0x3e9589===0x0){return _0x3c4519['value']['replace'](/\bNetType\/\w+\b/,'');}return _0x3c4519['value'];});_0x371f7d=_0x3c6eb8['x64hash128'](_0x23f0c4[_0x2a8a('0x37')](''),0x1f);if(_isWx()){wx['setStorageSync'](_0x2a8a('0x25'),_0x371f7d);}else localStorage[_0x2a8a('0x4')]('PushBrowserId',_0x371f7d);_0x5653d3(_0x371f7d);});}});};const _connect=(_0xbdb5e0,_0x329154,_0x4f6e12)=>{_imClient['setHostAndPort']('192.168.115.137',_0x2a8a('0x41'));_imUser[_0x2a8a('0x39')]=_0x2a8a('0x24');_imUser[_0x2a8a('0x1a')]=_0x2a8a('0x28');_imUser['_password']=_0x2a8a('0x28');_imClient['connect'](_imUser)['then'](()=>_0x329154())['catch'](_0x4fb010=>_0x4f6e12(_0x4fb010));};const SzyxPush={'init':function(_0x1999c3,_0x280a0c){console['log'](''+_0x1999c3+_0x280a0c);_imUser['_tenantNo']=_0x1999c3;_imClient['setDeviceType'](_0x280a0c===_0x2a8a('0x3')?0x1:_0x280a0c===_0x2a8a('0x17')?0x2:_0x280a0c===_0x2a8a('0x2a')?0x3:_0x280a0c===_0x2a8a('0x36')?0x4:_0x280a0c==='mac'?0x5:_0x280a0c==='wx'?0x6:-0x1);return new Promise((_0x1abd6b,_0xc0ade4)=>{if(!_0x1999c3)_0xc0ade4('租户id不能为空');_createFingerprint()[_0x2a8a('0x30')](_0x31abb2=>{_imUser['_deviceId']=_0x31abb2;_0x1abd6b();});});},'onMessage':function(_0x4d5492){return _imClient['onMessage'](_0x4d5492);},'unMessage':function(_0x40d292){_imClient['unMessage'](_0x40d292);},'register':function(_0x4a9ed0){return new Promise((_0x56f303,_0x4ae385)=>{if(!_0x4a9ed0)_0x4ae385(_0x2a8a('0x20'));_imUser['_userId']=_0x4a9ed0;if(_isWx()){uni[_0x2a8a('0x5')]({'url':_0x2a8a('0x34'),'success':_0x66bb08=>{_connect(_0x66bb08[_0x2a8a('0x29')],_0x56f303,_0x4ae385);},'fail':_0x52ddcc=>{_0x4ae385('注册im服务失败::'+error);}});}else{_0x574696['create']({'timeout':0xea60})['get']('http://192.168.115.137:8888/hello/123')[_0x2a8a('0x30')](_0x32bb56=>{_connect(_0x32bb56['data'],_0x56f303,_0x4ae385);})[_0x2a8a('0xa')](_0x5e1f1c=>{_0x4ae385('注册im服务失败::'+_0x5e1f1c);});}});},'sendTextMsg':function(_0x2278f1,_0x5a75f7){return _imClient[_0x2a8a('0xb')](_0x2278f1,_0x5a75f7);}};export default SzyxPush; +const _0x5443=['PushBrowserId','messageType','connect','xuqm','log','x64hash128','web','ios','windows','_deviceType','values','_host','setHostAndPort','用户id不能为空','unknown','parse','_port','delete','onMessage','message','android','join','random','192.168.115.137','value','set','_tenantNo','mapCall','注册im服务失败::','get','_user','guid','_account','catch','subscribe','_parseMsg','_userName','SEND','_client','/topic/server','sendTextMsg','发送消息失败','packetType','_userId','setDeviceType','messageId','then','unMessage','_mapMsg','map','stringify','_password'];const _0x3a35=function(_0x544369,_0x3a351d){_0x544369=_0x544369-0x0;let _0x1e3f95=_0x5443[_0x544369];return _0x1e3f95;};import _0x8f33f3 from'fingerprintjs2';import _0x26158e from'axios';import _0x282d0f from'stompjs';class SzyxPushClient{constructor(){this[_0x3a35('0x1b')]=new Map();this[_0x3a35('0x30')]=new Map();this[_0x3a35('0xb')]=null;this[_0x3a35('0x10')]=null;this['_deviceType']=null;this['_user']=null;this['_client']=null;}['guid'](){return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'['replace'](/[xy]/g,function(_0x4cf9e6){const _0x377e1c=Math[_0x3a35('0x16')]()*0x10|0x0,_0x5e3140=_0x4cf9e6==='x'?_0x377e1c:_0x377e1c&0x3|0x8;return _0x5e3140['toString'](0x10);});}['_parseMsg'](_0xf982c6){let _0x32504d=_0xf982c6[_0x3a35('0x13')];try{_0x32504d=JSON['parse'](_0xf982c6['message']);}catch(_0x487bcf){}let _0x1b414d='unknown';switch(_0xf982c6[_0x3a35('0x1')]){case 0x1:_0x1b414d='text';break;default:_0x1b414d=_0x3a35('0xe');break;}return{..._0xf982c6,'message':_0x32504d,'messageType':_0x1b414d};}['setHostAndPort'](_0x30589d,_0x29b4ab){this[_0x3a35('0xb')]=_0x30589d;this['_port']=_0x29b4ab;}['setDeviceType'](_0x317627){this[_0x3a35('0x9')]=_0x317627;}[_0x3a35('0x12')](_0x391113){let _0x661faf=Math['random']();if(this['mapCall']['has'](_0x661faf))_0x661faf=Math['random']();this[_0x3a35('0x1b')][_0x3a35('0x19')](_0x661faf,_0x391113);return _0x661faf;}[_0x3a35('0x2f')](_0x1116da){this['mapCall']['delete'](_0x1116da);}[_0x3a35('0x28')](_0x40d4be,_0xbb638c){return this['sendMessage']({'toClientId':_0x40d4be,'messageType':0x1,'message':'{\x22text\x22:\x22'+_0xbb638c+'\x22}'});}['sendMessage'](_0x444166){return new Promise((_0x29aeba,_0x2664bf)=>{let _0xc0e8ff=this[_0x3a35('0x1f')]();let _0x4a0849={'messageId':_0xc0e8ff,'target':this[_0x3a35('0x1e')]['_userId'],'fromClientId':this[_0x3a35('0x1e')][_0x3a35('0x2b')],'tenantNo':this['_user'][_0x3a35('0x1a')],'timestamp':Date['now'](),'packetType':_0x3a35('0x25'),..._0x444166};this[_0x3a35('0x30')][_0x3a35('0x19')](_0xc0e8ff,{'call':_0x29aeba,'message':_0x4a0849});this['_client']['send']('/topic/server',{},JSON['stringify'](_0x4a0849));setTimeout(()=>{if(this['_mapMsg']['has'](_0xc0e8ff))_0x2664bf({'msg':_0x3a35('0x29'),'content':this[_0x3a35('0x23')](_0x4a0849)});this[_0x3a35('0x30')][_0x3a35('0x11')](_0xc0e8ff);},0x1f4);});}['connect'](_0x4a5a67){this[_0x3a35('0x1e')]=_0x4a5a67;return new Promise((_0x170897,_0x2287c3)=>{if(!this['_host']||!this['_port'])_0x2287c3('环境信息错误');if(!this[_0x3a35('0x1e')]||!this[_0x3a35('0x1e')]['_userName']||!this[_0x3a35('0x1e')][_0x3a35('0x33')])_0x2287c3('用户信息错误');this[_0x3a35('0x26')]=_0x282d0f['client']('ws://'+this['_host']+':'+this[_0x3a35('0x10')]+'/stomp');this['_client']['debug']=null;this[_0x3a35('0x26')]['connect'](this['_user'][_0x3a35('0x24')],this[_0x3a35('0x1e')][_0x3a35('0x33')],()=>{_0x170897();this[_0x3a35('0x26')][_0x3a35('0x22')]('/topic/'+this[_0x3a35('0x1e')][_0x3a35('0x2b')],_0x3794fe=>{const _0x37864e=JSON[_0x3a35('0xf')](_0x3794fe['body']);if(_0x37864e[_0x3a35('0x2a')]==='SEND'){this[_0x3a35('0x26')]['send'](_0x3a35('0x27'),{},JSON[_0x3a35('0x32')]({'packetType':'SENDACK','messageId':_0x37864e[_0x3a35('0x2d')]}));for(const _0x1bba28 of this[_0x3a35('0x1b')][_0x3a35('0xa')]()){_0x1bba28(_0x37864e['messageType'],this['_parseMsg'](_0x37864e));}}else if(_0x37864e[_0x3a35('0x2a')]==='SENDACK'){const _0x3320e7=this['_mapMsg']['get'](_0x37864e[_0x3a35('0x2d')]);if(_0x3320e7)_0x3320e7['call'](this['_parseMsg'](_0x3320e7['message']));this[_0x3a35('0x30')][_0x3a35('0x11')](_0x37864e[_0x3a35('0x2d')]);}},_0x4812df=>_0x2287c3('订阅消息失败::'+_0x4812df));},_0x3159af=>_0x2287c3('连接服务器失败::'+_0x3159af),'/');});}}class SzyxPushUser{constructor(){this[_0x3a35('0x1a')]=null;this[_0x3a35('0x2b')]=null;this['_deviceId']=null;this[_0x3a35('0x20')]=null;this[_0x3a35('0x24')]=null;this[_0x3a35('0x33')]=null;}}let _imClient=new SzyxPushClient();let _imUser=new SzyxPushUser();const _createFingerprint=()=>{return new Promise(_0x23ae08=>{let _0x4b8e6c=localStorage['getItem'](_0x3a35('0x0'));if(_0x4b8e6c)_0x23ae08(_0x4b8e6c);else{_0x8f33f3[_0x3a35('0x1d')](_0x300728=>{const _0x2495db=_0x300728[_0x3a35('0x31')](function(_0xd63f3b,_0x3be78a){if(_0x3be78a===0x0){return _0xd63f3b[_0x3a35('0x18')]['replace'](/\bNetType\/\w+\b/,'');}return _0xd63f3b[_0x3a35('0x18')];});_0x4b8e6c=_0x8f33f3[_0x3a35('0x5')](_0x2495db[_0x3a35('0x15')](''),0x1f);localStorage['setItem'](_0x3a35('0x0'),_0x4b8e6c);_0x23ae08(_0x4b8e6c);});}});};const SzyxPush={'init':function(_0x2fffcb,_0x3a31bc){console[_0x3a35('0x4')](''+_0x2fffcb+_0x3a31bc);return new Promise((_0x37c16a,_0x1a0df5)=>{if(!_0x2fffcb)_0x1a0df5('租户id不能为空');_createFingerprint()[_0x3a35('0x2e')](_0x1e3f44=>{_imUser['_deviceId']=_0x1e3f44;_imUser[_0x3a35('0x1a')]=_0x2fffcb;_imClient[_0x3a35('0x2c')](_0x3a31bc===_0x3a35('0x7')?0x1:_0x3a31bc===_0x3a35('0x14')?0x2:_0x3a31bc===_0x3a35('0x6')?0x3:_0x3a31bc===_0x3a35('0x8')?0x4:_0x3a31bc==='mac'?0x5:-0x1);_0x37c16a();});});},'onMessage':function(_0x3cea11){return _imClient['onMessage'](_0x3cea11);},'unMessage':function(_0x191ec8){_imClient['unMessage'](_0x191ec8);},'register':function(_0x386690){return new Promise((_0x126662,_0x229b75)=>{if(!_0x386690)_0x229b75(_0x3a35('0xd'));_0x26158e['create']({'timeout':0xea60})['get']('http://192.168.115.137:8888/hello/123')['then'](()=>{_imClient[_0x3a35('0xc')](_0x3a35('0x17'),'61614');_imUser['_userId']=_0x386690;_imUser['_account']='56465456';_imUser[_0x3a35('0x24')]='xuqm';_imUser[_0x3a35('0x33')]=_0x3a35('0x3');_imClient[_0x3a35('0x2')](_imUser)[_0x3a35('0x2e')](()=>_0x126662())[_0x3a35('0x21')](_0x4abab3=>_0x229b75(_0x4abab3));})['catch'](_0x1a8f9b=>{_0x229b75(_0x3a35('0x1c')+_0x1a8f9b);});});},'sendTextMsg':function(_0x46e6f2,_0x3ce5c2){return _imClient[_0x3a35('0x28')](_0x46e6f2,_0x3ce5c2);}};export default SzyxPush; diff --git a/npm/package.json b/npm/package.json index d1f63bb..ea834ae 100644 --- a/npm/package.json +++ b/npm/package.json @@ -1,6 +1,6 @@ { "name": "@szyx/szyx-push-web", - "version": "0.0.20", + "version": "0.0.16", "description": "数字医信-即时通讯-im-js-sdk", "main": "index.js", "scripts": { diff --git a/web/src/src/szyx-push-sdk.js b/web/src/src/szyx-push-sdk.js index 0c79ef5..0dcb82b 100644 --- a/web/src/src/szyx-push-sdk.js +++ b/web/src/src/szyx-push-sdk.js @@ -2,6 +2,7 @@ import Fingerprint2 from 'fingerprintjs2'; import axios from 'axios'; import Stomp from "stompjs"; + class SzyxPushClient { @@ -16,12 +17,12 @@ class SzyxPushClient { this._user = null; this._client = null; + this.socketOpen = false; } guid() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - const r = Math.random() * 16 | 0, - v = c === 'x' ? r : (r & 0x3 | 0x8); + const r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } @@ -60,8 +61,7 @@ class SzyxPushClient { onMessage(call) { let callId = Math.random() - if (this.mapCall.has(callId)) - callId = Math.random() + if (this.mapCall.has(callId)) callId = Math.random() this.mapCall.set(callId, call) return callId } @@ -72,9 +72,7 @@ class SzyxPushClient { sendTextMsg(userId, text) { return this.sendMessage({ - toClientId: userId, - messageType: 1, - message: `{"text":"${text}"}` + toClientId: userId, messageType: 1, message: `{"text":"${text}"}` }) } @@ -87,58 +85,92 @@ class SzyxPushClient { fromClientId: this._user._userId, tenantNo: this._user._tenantNo, timestamp: Date.now(), - packetType: "SEND", - ...msg + packetType: "SEND", ...msg } this._mapMsg.set(messageId, {call: resolve, message: message}) this._client.send(`/topic/server`, {}, JSON.stringify(message)) setTimeout(() => { if (this._mapMsg.has(messageId)) reject({ - msg: '发送消息失败', - content: this._parseMsg(message) + msg: '发送消息失败', content: this._parseMsg(message) }) this._mapMsg.delete(messageId) }, 500) }) } + sendSocketMessage(msg) { + console.log('---->sendSocketMessage', msg) + wx.sendSocketMessage({ // 通过 WebSocket连接发送数据 + data: msg + }) + } + + ws = { + send: this.sendSocketMessage + } + + _connectClient(resolve, reject) { + + this._client.debug = null + //进行连接 + console.log('----->', '开始im连接') + this._client.connect(this._user._userName, this._user._password, () => { + console.log('----->', '连接成功') + resolve() + this._client.subscribe("/topic/" + this._user._userId, msg => { + const message = JSON.parse(msg.body) + if (message.packetType === 'SEND') { + this._client.send(`/topic/server`, {}, JSON.stringify({ + packetType: 'SENDACK', messageId: message.messageId + })) + for (const call of this.mapCall.values()) { + call(message.messageType, this._parseMsg(message)); + } + } else if (message.packetType === 'SENDACK') { + const m = this._mapMsg.get(message.messageId) + if (m) m.call(this._parseMsg(m.message)) + this._mapMsg.delete(message.messageId) + } + }, error => reject(`订阅消息失败::${error}`)); + }, error => reject(`连接服务器失败::${error}`), '/'); + } + connect(user) { this._user = user return new Promise((resolve, reject) => { if (!this._host || !this._port) reject('环境信息错误') if (!this._user || !this._user._userName || !this._user._password) reject('用户信息错误') - //初始化连接 - this._client = Stomp.client(`ws://${this._host}:${this._port}/stomp`) - this._client.debug = null - //进行连接 - this._client.connect( - this._user._userName, - this._user._password, - () => { - resolve() - this._client.subscribe("/topic/" + this._user._userId, - msg => { - const message = JSON.parse(msg.body) - if (message.packetType === 'SEND') { - this._client.send(`/topic/server`, {}, JSON.stringify({ - packetType: 'SENDACK', - messageId: message.messageId - })) - for (const call of this.mapCall.values()) { - call(message.messageType, this._parseMsg(message)); - } - } else if (message.packetType === 'SENDACK') { - const m = this._mapMsg.get(message.messageId) - if (m) m.call(this._parseMsg(m.message)) - this._mapMsg.delete(message.messageId) - } - }, - error => reject(`订阅消息失败::${error}`)); - }, - error => reject(`连接服务器失败::${error}`), - '/' - ); + if (_isWx()) { + console.log('----------------------------------------------------') + // 创建一个 WebSocket 连接 + wx.connectSocket({ + url: `ws://${this._host}:${this._port}/ws` + }) + + // 监听 WebSocket 连接打开事件 + wx.onSocketOpen((res) => { + this.socketOpen = true + this.ws.onopen() + }) + + wx.onSocketMessage(res => { + this.ws.onmessage(res) + // 推送成功处理数据 + }) + Stomp.setInterval = (interval, f) => { + return setInterval(f, interval) + } + Stomp.clearInterval = (id) => { + return clearInterval(id) + } + this._client = Stomp.over(this.ws) + + } else { + //初始化连接 + this._client = Stomp.client(`ws://${this._host}:${this._port}/ws`) + } + this._connectClient(resolve, reject) }) } @@ -164,11 +196,18 @@ class SzyxPushUser { let _imClient = new SzyxPushClient() let _imUser = new SzyxPushUser() +const _isWx = () => { + return _imClient._deviceType === 6 +} + const _createFingerprint = () => { return new Promise((resolve) => { - let browserId = localStorage.getItem('PushBrowserId') - if (browserId) resolve(browserId) - else { + let browserId = null + if (_isWx()) browserId = wx.getStorageSync("PushBrowserId"); else browserId = localStorage.getItem('PushBrowserId') + + if (browserId) { + resolve(browserId) + } else { Fingerprint2.get((components) => { // 参数只有回调函数时,默认浏览器指纹依据所有配置信息进行生成 const values = components.map(function (component, index) { if (index === 0) { //把微信浏览器里UA的wifi或4G等网络替换成空,不然切换网络会ID不一样 @@ -177,58 +216,71 @@ const _createFingerprint = () => { return component.value }) browserId = Fingerprint2.x64hash128(values.join(''), 31) - localStorage.setItem('PushBrowserId', browserId) // 存储浏览器指纹,在项目中用于校验用户身份和埋点 + if (_isWx()) { + wx.setStorageSync('PushBrowserId', browserId) + } else localStorage.setItem('PushBrowserId', browserId) // 存储浏览器指纹,在项目中用于校验用户身份和埋点 resolve(browserId) }) } }) } + +const _connect = (res, resolve, reject) => { + _imClient.setHostAndPort('192.168.115.137', '15774') + + _imUser._account = '56465456' + + _imUser._userName = 'xuqm' + _imUser._password = 'xuqm' + + _imClient.connect(_imUser).then(() => resolve()).catch(error => reject(error)) + +} + const SzyxPush = { init: function (tenantNo, osType) { console.log(`${tenantNo}${osType}`) - + _imUser._tenantNo = tenantNo + _imClient.setDeviceType(osType === 'ios' ? 1 : osType === 'android' ? 2 : osType === 'web' ? 3 : osType === 'windows' ? 4 : osType === 'mac' ? 5 : osType === 'wx' ? 6 : -1) return new Promise((resolve, reject) => { if (!tenantNo) reject('租户id不能为空') _createFingerprint().then(r => { _imUser._deviceId = r - _imUser._tenantNo = tenantNo - _imClient.setDeviceType(osType === 'ios' ? 1 : osType === 'android' ? 2 : osType === 'web' ? 3 : osType === 'windows' ? 4 : osType === 'mac' ? 5 : -1) resolve() }) }) - }, - onMessage: function (callback) { + }, onMessage: function (callback) { return _imClient.onMessage(callback) - }, - unMessage: function (callId) { + }, unMessage: function (callId) { _imClient.unMessage(callId) - }, - register: function (userId) { + }, register: function (userId) { return new Promise((resolve, reject) => { if (!userId) reject('用户id不能为空') - - axios.create({ - timeout: 60000 - }).get('http://192.168.115.137:8888/hello/123') - .then(() => { - _imClient.setHostAndPort('192.168.115.137', '61614') - - _imUser._userId = userId - _imUser._account = '56465456' - - _imUser._userName = 'xuqm' - _imUser._password = 'xuqm' - - _imClient.connect(_imUser).then(() => resolve()).catch(error => reject(error)) - - }) - .catch((error) => { - reject(`注册im服务失败::${error}`) - }) + _imUser._userId = userId + if (_isWx()) { + uni.request({ + url: 'http://192.168.115.137:8888/hello/123', //仅为示例,并非真实接口地址。 + success: (res) => { + _connect(res.data, resolve, reject) + }, fail: e => { + reject(`注册im服务失败::${error}`) + } + }); + + } else { + axios.create({ + timeout: 60000 + }).get('http://192.168.115.137:8888/hello/123') + .then((res) => { + _connect(res.data, resolve, reject) + }) + .catch((error) => { + reject(`注册im服务失败::${error}`) + }) + } }) - }, - sendTextMsg: function (userId, text) { + }, sendTextMsg: function (userId, text) { return _imClient.sendTextMsg(userId, text) } };