169 lines
6.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function ($, learun) {
"use strict";
var msgList = {};
var imChat;
var isLoaded = -1;
var loadingMsg = {};
var loadingMsg2 = {};
var _im = {
init: function () {
_im.registerServer();
_im.connect();
}
// 连接服务端
, connect: function () {
var loginInfo = learun.clientdata.get(['userinfo']);
if (loginInfo.imOpen != 'true') {
return;
}
$.ajax({
url: loginInfo.imUrl + "/hubs",
type: "get",
dataType: "text",
success: function (data) {
eval(data);
//Set the hubs URL for the connection
$.connection.hub.url = loginInfo.imUrl;
$.connection.hub.qs = { "userId": loginInfo.userId };
// Declare a proxy to reference the hub.
imChat = $.connection.ChatsHub;
_im.registerClient();
// 连接成功后注册服务器方法
$.connection.hub.start().done(function () {
_im.afterSuccess();
});
//断开连接后
$.connection.hub.disconnected(function () {
_im.disconnected();
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
isLoaded = 0;
},
});
}
// 连接成功后执行方法
, afterSuccess: function () {
isLoaded = 1;
$('.lr-im-bell').show();
}
// 断开连接后执行
, disconnected: function () {
isLoaded = 0;
}
// 注册客户端方法
, registerClient: function () {
if (imChat) {
//接收消息
imChat.client.revMsg = function (userId, msg, dateTime, isSystem) {
if (!loadingMsg2[userId]) {
var point = { userId: userId, content: msg, time: dateTime, isSystem: isSystem || 0 };
addMsgList(userId, point);
learun.im.revMsg && learun.im.revMsg(userId, msg, dateTime, isSystem || 0);
}
}
}
}
// 注册服务端方法
,registerServer: function () {
// 发送信息
_im.sendMsg = function (userId, msg) {
if (isLoaded == 1) {
imChat.server.sendMsg(userId, msg, 0);
}
else if (isLoaded == -1) {
setTimeout(function () {
_im.sendMsg(userId, msg);
}, 100);
}
};
}
};
function addMsgList(userId, item) {
msgList[userId] = msgList[userId] || [];
if (loadingMsg[userId]) {
setTimeout(function () {
addMsgList(userId, item);
}, 100);
}
else {
msgList[userId].push(item);
}
}
learun.im = {
addContacts: function (userId) {// 添加联系人
learun.httpAsync('Post', top.$.rootUrl + '/LR_IM/IMMsg/AddContact', { otherUserId: userId }, function (data) {});
},
removeContacts: function (userId) {// 移除联系人
learun.httpAsync('Post', top.$.rootUrl + '/LR_IM/IMMsg/RemoveContact', { otherUserId: userId }, function (data) { });
},
getContacts: function (callback) {// 获取最近的联系人列表
setTimeout(function () {
learun.httpAsync('GET', top.$.rootUrl + '/LR_IM/IMMsg/GetContactsList', {}, function (res) {
if (res) {
_im.init();
callback(res.data || [], res.sysUserList || []);
}
});
}, 1000);
},
updateContacts: function (userId) {
learun.httpAsync('Post', top.$.rootUrl + '/LR_IM/IMMsg/UpdateContactState', { otherUserId: userId}, function (data) {
});
},
sendMsg: function (userId, msg) {// 发送消息
var time = "";
var loginInfo = learun.clientdata.get(['userinfo']);
var point = { userId: loginInfo.userId, content: msg, time: learun.getDate('yyyy-MM-dd hh:mm:ss'), isSystem: 0 };
addMsgList(userId, point);
learun.httpAsync('Post', top.$.rootUrl + '/LR_IM/IMMsg/SendMsg', { userId: userId, content: msg }, function (data) {
_im.sendMsg(userId, msg);// 发送给即时通讯服务
});
if (msgList[userId].length > 1) {
if (learun.parseDate(point.time).DateDiff('s', msgList[userId][msgList[userId].length - 2].time) > 60) {
time = point.time;
}
}
else {
time = point.time;
}
return time;
},
getMsgList: function (userId, callback,isGetMsgList) {
msgList[userId] = msgList[userId] || [];
loadingMsg[userId] = true;
if (msgList[userId].length == 0 && isGetMsgList) {// 如果没有信息获取最近10条的聊天记录
loadingMsg2[userId] = true;
learun.httpAsync('GET', top.$.rootUrl + '/LR_IM/IMMsg/GetMsgList', { userId: userId }, function (data) {
msgList[userId] = msgList[userId] || [];
data = data || [];
var len = data;
if (len > 0) {
for (var i = len - 1; i >= 0; i--) {
var item = data[i];
var point = { userId: _item.F_SendUserId, content: _item.F_Content, time: _item.F_CreateDate, isSystem: _item.F_IsSystem || 0 };
msgList[userId].push(point);
}
}
callback(msgList[userId]);
loadingMsg[userId] = false;
loadingMsg2[userId] = false;
});
}
else {
callback(msgList[userId]);
loadingMsg[userId] = false;
}
},
registerRevMsg: function (callback) {// 获取消息记录
learun.im.revMsg = callback;
}
};
})(jQuery, top.learun);