Authored by 陈轩

聊天 消息状态重发

... ... @@ -38,9 +38,10 @@ const msgTypeMap = {
};
let userName = $('#js-uname').val();
let uid = $('#js-uid').val();
let encryptedUid = $('#js-eid').val();
let userAvatar = $('#js-avatar').val() || socketConf.defaultUserHead;
let uid = cmEntity.userId = $('#js-uid').val() || 0;
let encryptedUid = cmEntity.encryptedUid = $('#js-eid').val() || 0;
let userAvatar = cmEntity.userHead = $('#js-avatar').val() || socketConf.defaultUserHead;
// 客服配置
let customerService = {
... ... @@ -64,7 +65,7 @@ var chat = {
$chatWin: null,
$netTip: null,
msgArr: [],
unFinshMSGs: {}, // 没有发送出去消息
$ratingView: $('#chat-comment'),
... ... @@ -125,8 +126,7 @@ var chat = {
onMessage: function(event) {
let received = JSON.parse(event.data);
console.log('客户端接收到消息:');
console.log(received);
console.log('客户端接收到消息:', received);
// update 会话id
cmEntity.conversationId = received.newConversationId > 0 ?
... ... @@ -235,6 +235,8 @@ var chat = {
*
*/
sendMSG: function(msg, noDraw = false) {
const self = this;
if (!msg || !msg.data) {
return;
}
... ... @@ -266,24 +268,76 @@ var chat = {
cmEntity.chatMessage.type = 10;
cmEntity.chatMessage.content = arr;
break;
case 'picture':
cmEntity.chatMessage.content = data.content;
cmEntity.chatMessage.type = 2;
break;
case 'text':
default:
cmEntity.chatMessage.type = 1;
cmEntity.chatMessage.content = data.content;
}
if (!noDraw) {
let $msg = this._drawMSG(msg);
self.wrapMSG(cmEntity, $msg)
.trigger('send.sendEvent');
} else {
socket.send(JSON.stringify(cmEntity));
}
return this;
},
/**
* 消息发送的生命周期
* 1. send Event
* 2. sucess Event
* 3. fail Event
* @param {object} cmEntity
* @param {jquery} $msg
* @param {function} sendAction
* @return $msg
*/
wrapMSG(cmEntity, $msg, sendAction) {
var self = this;
// TODO 时间
let uuid = cmEntity.uuid;
let msgStr = JSON.stringify(cmEntity);
!noDraw && this._drawMSG(msg);
this.unFinshMSGs[uuid] = $msg;
socket.send(JSON.stringify(cmEntity));
$msg.data('msg', msgStr);
return this;
$msg
.on('fail.sendEvent', function() {
$msg.removeClass('send-loading')
.addClass('send-fail')
.one('click', () => {
$msg.trigger('send.sendEvent');
});
})
.on('success.sendEvent', function() {
clearTimeout($msg.data('timeoutId'));
$msg.removeClass('send-loading send-fail')
.off('sendEvent')
.removeData();
})
.on('send.sendEvent', function() {
if (navigator.onLine) {
$msg.removeClass('send-fail')
.addClass('send-loading');
$msg.data('timeoutId', setTimeout(() => {
if (self.unFinshMSGs[uuid]) {
$msg.trigger('fail.sendEvent');
}
}, 5000));
socket.send($msg.data('msg'));
} else {
$msg.trigger('fail.sendEvent');
}
});
return $msg;
},
/**
... ... @@ -354,7 +408,14 @@ var chat = {
var recType = rec.type,
chatMessage = rec.chatMessage,
msgType = chatMessage.type,
allTypes = socketConf.recType;
allTypes = socketConf.recType,
uuid = rec.uuid;
if (this.unFinshMSGs[uuid]) {
let $msg = this.unFinshMSGs[uuid];
$msg.trigger('success.sendEvent');
}
// var uuid = rec.uuid;
var viewData;
... ... @@ -386,6 +447,15 @@ var chat = {
}
break;
case allTypes.BREAK_TIME:
this._sysInfo(chatMessage.content);
break;
// 客服邀请评价
case allTypes.EVAL_INVITE:
this._sysInfo('<p data-trigger="rating">请对我们的服务进行<span class="blue">评价</span></p>');
break;
// 客服进入
case allTypes.CS_ENTER:
this.$chat.toggleClass('online', true);
... ...
... ... @@ -54,8 +54,7 @@ function sendMsg(msg) {
return;
}
if (socket.readyState === WebSocket.OPEN) {
console.log('websocket send: ');
console.table(JSON.parse(msg));
console.log('websocket send: ', JSON.parse(msg));
socket.send(msg);
} else {
console.log('The socket is not open.');
... ...