169 lines
6.4 KiB
JavaScript
169 lines
6.4 KiB
JavaScript
(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); |