ソースを参照

调整结构

master
xuqm 1年前
コミット
5ddd8a9437
3個のファイルの変更130行の追加78行の削除
  1. +1
    -1
      npm/index.js
  2. +1
    -1
      npm/package.json
  3. +128
    -76
      web/src/src/szyx-push-sdk.js

+ 1
- 1
npm/index.js
ファイル差分が大きすぎるため省略します
ファイルの表示


+ 1
- 1
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": {


+ 128
- 76
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)
}
};


読み込み中…
キャンセル
保存