//app.js
//聊天控件
let WebIM = wx.WebIM = require("./utils/WebIM.js").default;
let disp = require("./utils/broadcast");
App({
getRoomPage: function () {
return this.getPage("pages/chatroom/chatroom")
},
getPage: function (pageName) {
var pages = getCurrentPages()
return pages.find(function (page) {
return page.__route__ == pageName
})
},
onLaunch: function (option) {
var that = this
//调用API从本地缓存中获取数据
var userToken = wx.getStorageSync('userToken')
var userId = wx.getStorageSync('userId')
var tourist = wx.getStorageSync('tourist')
if (tourist || tourist == true ){
this.globalData.tourist = true
}
this.globalData.token = userToken
this.globalData.userId = userId
this.globalData.currentId = userId[0]
console.log(userToken)
// wx.navigateTo({
// url: 'pages/BloodSugerHome/BloodSugerHome'
// })
if (option.query) {
if (option.query.mpid) {
this.globalData.openInfo.mpid = option.query.mpid
wx.setStorageSync('mpid', option.query.mpid)
}
// 医院name
if (option.query.hospitalName) {
wx.setStorageSync('codeHosName', option.query.hospitalName)
this.globalData.hospital.name = option.query.hospitalName
}
// 医院id
if (option.query.hospitalId) {
wx.setStorageSync('codeHosId', option.query.hospitalId)
this.globalData.hospital.id = option.query.hospitalId
}
}
var mpid = wx.getStorageSync('mpid')
if(mpid){
this.globalData.openInfo.mpid = mpid
}
wx.login({
success: function (res) {
// success
that.globalData.openInfo.childCode = res.code
},
fail: function (res) {
// fail
},
complete: function (res) {
// complete
}
})
//聊天
WebIM.conn.listen({
onOpened: function (message) {
console.log("登录成功")
wx.setStorageSync('isHxOpend', true)
// WebIM.conn.setPresence()
// WebIM.conn.getRoster(rosters)
},
onPresence: function (message) {
console.log('onPresence', message)
var pages = getCurrentPages()
if (message.type == "unsubscribe") {
pages[0].moveFriend(message)
}
if (message.type === "subscribe") {
//console.log('MMMMMMMMMMMMMM',message.status)
if (message.status === '[resp:true]') {
return
} else {
/*同意添加好友操作的实现方法*/
WebIM.conn.subscribed({
to: message.from
});
}
}
},
onRoster: function (message) {
// console.log('onRoster', message)
// var pages = getCurrentPages()
// if (pages[0]) {
// pages[0].onShow()
// }
},
onTextMessage(message){
console.log("onTextMessage", message);
var page = that.getRoomPage();
if(message){
if(onMessageError(message)){
if (page && page.data != null && page.data.username && message.to == page.data.username) {
page.receiveMsg(message, 'txt')
}else{
var myName = wx.getStorageSync('hxName')
var messageFrom = message.from
if ( message.type === 'groupchat') {messageFrom = message.to}
var chatMsg = that.globalData.unrederMsg[messageFrom + myName] || [];
var value = WebIM.parseEmoji(message.data.replace(/\n/mg, ''))
var time = WebIM.time()
var msgData = {
info: {
from: message.from,
to: message.to
},
username: message.from,
yourname: message.from,
msg: {
type: 'txt',
data: value,
url: message.url
},
style: '',
time: time,
mid: 'txt' + message.id
}
chatMsg.push(msgData)
that.globalData.unrederMsg[messageFrom+ myName] = chatMsg;
wx.setStorage({
key: messageFrom + myName,
data: that.globalData.unrederMsg[messageFrom + myName],
success: function () {
console.log('setStorage success')
disp.fire("em.xmpp.unreadspot", message);
}
})
console.log('消息打印',messageFrom + myName,that.globalData.unrederMsg[messageFrom + myName])
}
}
}
},
onEmojiMessage: function (message) {
console.log("onEmojiMessage", message);
if(message){
if(onMessageError(message)){
msgStorage.saveReceiveMsg(message, msgType.EMOJI);
}
}
},
onPictureMessage(message){
console.log("onPictureMessage", message);
var page = that.getRoomPage()
if(message){
if(onMessageError(message)){
if (page && page.data != null && page.data.username && message.to == page.data.username) {
page.receiveMsg(message, 'img')
}else{
var myName = wx.getStorageSync('hxName')
var messageFrom = message.from
if ( message.type === 'groupchat') {messageFrom = message.to}
var chatMsg = that.globalData.unrederMsg[messageFrom+ myName] || []
var time = WebIM.time()
var msgData = {
info: {
from: message.from,
to: message.to
},
username: message.from,
yourname: message.from,
msg: {
type: 'img',
data: message.url,
url: message.url
},
style: '',
time: time,
mid: 'img' + message.id
}
chatMsg.push(msgData)
that.globalData.unrederMsg[messageFrom + myName] = chatMsg;
wx.setStorage({
key: messageFrom + myName,
data: that.globalData.unrederMsg[messageFrom + myName],
success: function () {
console.log('setStorage success')
disp.fire("em.xmpp.unreadspot", message);
}
})
}
}
}
},
onAudioMessage: function ( message ) {
console.log("onAudioMessage", message);
var page = that.getRoomPage()
if(message){
if(onMessageError(message)){
if (page && page.data != null && page.data.username && message.to == page.data.username) {
page.receiveMsg(message, 'audio')
}else{
var myName = wx.getStorageSync('hxName')
var messageFrom = message.from
if ( message.type === 'groupchat') {messageFrom = message.to}
var chatMsg = that.globalData.unrederMsg[messageFrom + myName] || []
var time = WebIM.time()
var msgData = {
info: {
from: message.from,
to: message.to
},
username: message.from,
yourname: message.from,
msg: {
type: 'audio',
data: message.url,
url: message.url,
length : message.length,
token : message.accessToken
},
style: '',
time: time,
mid: 'audio' + message.id
}
chatMsg.push(msgData)
that.globalData.unrederMsg[messageFrom + myName] = chatMsg;
wx.setStorage({
key: messageFrom + myName,
data: that.globalData.unrederMsg[messageFrom+ myName],
success: function () {
console.log('setStorage success')
disp.fire("em.xmpp.unreadspot", message);
}
})
}
}
}
},
// 各种异常
onError(error){
console.log(error)
// 16: server-side close the websocket connection
if(error.type == WebIM.statusCode.WEBIM_CONNCTION_DISCONNECTED && !logout){
if(WebIM.conn.autoReconnectNumTotal < WebIM.conn.autoReconnectNumMax){
return;
}
wx.showToast({
title: "server-side close the websocket connection",
duration: 1000
});
wx.redirectTo({
url: "../login/login"
});
logout = true
return;
}
// 8: offline by multi login
if(error.type == WebIM.statusCode.WEBIM_CONNCTION_SERVER_ERROR){
wx.showToast({
title: "offline by multi login",
duration: 1000
});
wx.redirectTo({
url: "../login/login"
});
}
if(error.type == WebIM.statusCode.WEBIM_CONNCTION_OPEN_ERROR){
wx.hideLoading()
disp.fire("em.xmpp.error.passwordErr");
// wx.showModal({
// title: "用户名或密码错误",
// confirmText: "OK",
// showCancel: false
// });
}
if (error.type == WebIM.statusCode.WEBIM_CONNCTION_AUTH_ERROR) {
wx.hideLoading()
disp.fire("em.xmpp.error.tokenErr");
}
if (error.type == 'socket_error') {///sendMsgError
console.log('socket_errorsocket_error', error)
wx.showToast({
title: "网络已断开",
icon: 'none',
duration: 2000
});
disp.fire("em.xmpp.error.sendMsgErr", error);
}
},
onOffline: function () {
console.log("onOffline:")
},
onOnline: function () {
console.log("onOnline:")
}
})
},
getUserInfo: function (cb) {
var that = this
if (this.globalData.userInfo) {
typeof cb == "function" && cb(this.globalData.userInfo)
} else {
//调用登录接口
wx.login({
success: function () {
wx.getUserInfo({
success: function (res) {
that.globalData.userInfo = res.userInfo
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
},
globalData: {
userInfo: null,
token: '',
userId:'',
openInfo: {},
artList:[],
days:0,
currentId:'',
tourist:false,
unrederMsg:[],
hospital:{id:'',name:''}
},
})
function calcUnReadSpot(message){
let myName = wx.getStorageSync("hxName");
let members = wx.getStorageSync("member") || []; //好友
var listGroups = wx.getStorageSync('listGroup')|| []; //群组
let allMembers = members.concat(listGroups)
let count = allMembers.reduce(function(result, curMember, idx){
let chatMsgs;
if (curMember.groupid) {
chatMsgs = wx.getStorageSync(curMember.groupid + myName.toLowerCase()) || [];
}else{
chatMsgs = wx.getStorageSync(curMember.name.toLowerCase() + myName.toLowerCase()) || [];
}
return result + chatMsgs.length;
}, 0);
getApp().globalData.unReadMessageNum = count;
disp.fire("em.xmpp.unreadspot", message);
}
function ack(receiveMsg){
// 处理未读消息回执
var bodyId = receiveMsg.id; // 需要发送已读回执的消息id
var ackMsg = new WebIM.message("read", WebIM.conn.getUniqueId());
ackMsg.set({
id: bodyId,
to: receiveMsg.from
});
WebIM.conn.send(ackMsg.body);
}
function onMessageError(err){
if(err.type === "error"){
wx.showToast({
title: err.errorText
});
return false;
}
return true;
}
function getCurrentRoute(){
let pages = getCurrentPages();
let currentPage = pages[pages.length - 1];
return currentPage.route;
}