receive_new_msg.js
3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//监听新消息事件
var msgList = [];
var dateStart = null;
var dateEnd = null;
//newMsgList 为新消息数组,结构为[Msg]
function onMsgNotify(newMsgList) {
//console.warn(newMsgList);
var sess, newMsg;
//获取所有聊天会话
var sessMap = webim.MsgStore.sessMap();
for (var j in newMsgList) { //遍历新消息
newMsg = newMsgList[j];
if (!selToID) { //没有聊天对象, selToID 为全局变量,表示当前正在进行的聊天 id,当聊天类型为私聊时,该值为好友帐号,否则为群号。
selToID = newMsg.getSession().id();
selType = newMsg.getSession().type();
selSess = newMsg.getSession();
var headUrl;
if (selType == webim.SESSION_TYPE.C2C) {
headUrl = friendHeadUrl;
} else {
headUrl = groupHeadUrl;
}
addSess(selType, selToID, newMsg.getSession().name(), headUrl, 0, 'sesslist', newMsg); //新增一个对象
setSelSessStyleOn(selToID);
}
if (newMsg.getSession().id() == selToID) { //为当前聊天对象的消息
//在聊天窗体中新增一条消息
//console.warn(newMsg);
addMsg(newMsg);
}
msgList.push(newMsg.elems[0].content.text);
}
//消息已读上报,以及设置会话自动已读标记
// webim.setAutoRead(selSess, true, true);
for (var i in sessMap) {
sess = sessMap[i];
// 更新demo 维护的recentSessMap的MsgGroupReadedSeq字段
if(sess._impl && sess._impl.curMaxMsgSeq){
recentSessMap[i] = {};
recentSessMap[i].MsgGroupReadedSeq = sess._impl.curMaxMsgSeq;
}
if (selToID != sess.id()) { //更新其他聊天对象的未读消息数
if (!dateStart) {
dateStart = new Date();
}
updateSessDiv(sess.type(), sess.id(), sess.name(), sess.unread());
console.debug(sess.id(), sess.unread());
dateEnd = new Date();
}
}
}
//监听直播聊天室新消息事件
//newMsgList 为新消息数组,结构为[Msg]
//监听大群新消息(普通,点赞,提示,红包)
function onBigGroupMsgNotify(newMsgList) {
var newMsg;
for (var i = newMsgList.length - 1; i >= 0; i--) { //遍历消息,按照时间从后往前
newMsg = newMsgList[i];
webim.Log.warn('receive a new group(AVChatRoom) msg: ' + newMsg.getFromAccountNick());
//显示收到的消息
addMsg(newMsg);
}
}
//消息已读通知
function onMsgReadedNotify(notify) {
var sessMap = webim.MsgStore.sessMap()[webim.SESSION_TYPE.C2C + notify.From_Account];
if (sessMap) {
var msgs = _.clone(sessMap.msgs());
var rm_msgs = _.remove(msgs, function (m) {
return m.time <= notify.LastReadTime
});
var unread = sessMap.unread() - rm_msgs.length;
unread = unread > 0 ? unread : 0;
//更新sess的未读数
sessMap.unread(unread);
// console.debug('更新C2C未读数:',notify.From_Account,unread);
//更新页面的未读数角标
if (unread > 0) {
$("#badgeDiv_" + notify.From_Account).text(unread).show();
} else {
$("#badgeDiv_" + notify.From_Account).val("").hide();
}
}
}