|
@ -51,26 +51,28 @@ router.post(APIv1.Chats.SM, function (req, res) {
|
|
|
}
|
|
|
|
|
|
// 字段判断
|
|
|
if (message.to == null || message.title == null) {
|
|
|
throw {httpStatus: 406, message: 'Missing fields.'}
|
|
|
var testing = objectUtil.fieldsCheck(message, "to", "title", "summary", "contentType", "content");
|
|
|
if (!testing.pass) {
|
|
|
throw {httpStatus: 406, message: testing.message}
|
|
|
}
|
|
|
|
|
|
// 消息处理
|
|
|
user.getUserStatus(message.to, function (err, userStatus) {
|
|
|
user.getUserStatus(message.to, function (err, rows) {
|
|
|
if (err) {
|
|
|
console.log("Lookup system message receiver failed: ", err);
|
|
|
|
|
|
throw {httpStatus: 500, message: "Lookup system message receiver failed: "};
|
|
|
}
|
|
|
|
|
|
if(userStatus.length == 0){
|
|
|
throw {httpStatus: 404, message: "User not found."};
|
|
|
res.status(500).send({message: "Lookup system message receiver failed."});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
res.writeHead(200);
|
|
|
if (rows.length == 0) {
|
|
|
res.status(404).send({message: "User not found: " + message.to});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var pushable = userStatus.length > 0 && userStatus[0].is_online;
|
|
|
var notifyMessage = JSON.stringify({type: message.contentType, content: message.content});
|
|
|
var pushable = rows.length > 0 && rows[0].is_online;
|
|
|
var notifyMessage = JSON.stringify({type: 'system_msg', content: message.content});
|
|
|
var userStatus = rows[0];
|
|
|
|
|
|
// 保存该条推送信息
|
|
|
systemMsg.save(message.to,
|
|
@ -80,12 +82,15 @@ router.post(APIv1.Chats.SM, function (req, res) {
|
|
|
message.content,
|
|
|
function (err, result) {
|
|
|
if (err) {
|
|
|
log.error("Save system message failed, ", err);
|
|
|
log.error("Save system notify message failed, ", err);
|
|
|
|
|
|
throw {httpStatus: 500, message: "Save system message failed."};
|
|
|
res.status(500).send({message: "Save system notify message failed."});
|
|
|
} else {
|
|
|
// 先结束网络连接,再处理后续操作,减少客户端等待
|
|
|
res.status(200).send();
|
|
|
|
|
|
// 保存通知到数据库中
|
|
|
notifyMessage.saveMessage(message.to,
|
|
|
notifyMsg.save(message.to,
|
|
|
message.contentType,
|
|
|
message.title,
|
|
|
message.summary,
|
|
@ -93,12 +98,12 @@ router.post(APIv1.Chats.SM, function (req, res) {
|
|
|
pushable,
|
|
|
function (err, result) {
|
|
|
if (err) {
|
|
|
log.error("Save system message failed, ", err);
|
|
|
log.error("Save system notify message failed, ", err);
|
|
|
|
|
|
throw {httpStatus: 500, message: "Save system notify message failed."};
|
|
|
res.status(500).send({message: "Save system notify message failed."});
|
|
|
} else {
|
|
|
if (pushable == true) {
|
|
|
if (userStatus.platform == PLATFORMS.iOS) {
|
|
|
if (pushable) {
|
|
|
if (userStatus.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(message.to,
|
|
|
userStatus.token,
|
|
|
message.contentType,
|
|
@ -108,7 +113,7 @@ router.post(APIv1.Chats.SM, function (req, res) {
|
|
|
function (err, result) {
|
|
|
err != null ? console.log(err) : console.log(result);
|
|
|
});
|
|
|
} else if (PLATFORMS.iOS.Android) {
|
|
|
} else if (userStatus.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(userStatus.client_id,
|
|
|
message.contentType,
|
|
|
message.title,
|
|
@ -125,8 +130,6 @@ router.post(APIv1.Chats.SM, function (req, res) {
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
|
|
|
res.writeHead(200);
|
|
|
});
|
|
|
|
|
|
/**
|
|
@ -153,57 +156,50 @@ router.post(APIv1.Chats.PM, function (req, res) {
|
|
|
}
|
|
|
|
|
|
// 字段判断
|
|
|
if (message.from == null || message.to == null || message.contentType == null || message.content == null) {
|
|
|
|
|
|
throw {httpStatus: 406, message: 'Missing fields.'}
|
|
|
var testing = objectUtil.fieldsCheck(message, "from", "to", "contentType", "content");
|
|
|
if (!testing.pass) {
|
|
|
throw {httpStatus: 406, message: testing.message}
|
|
|
}
|
|
|
|
|
|
// 处理消息
|
|
|
user.isExist(message.to, function (err, result) {
|
|
|
user.isExist(message.to, function (err, rows) {
|
|
|
if (err) {
|
|
|
console.log('Lookup receiving users failed: ', err);
|
|
|
|
|
|
throw {httpStatus: 500, message: 'Lookup receiving users failed.'};
|
|
|
res.status(500).send({message: 'Lookup receiving users failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (result.length == 0) {
|
|
|
throw {httpStatus: 404, message: 'Receiving users not found.'};
|
|
|
if (rows.length == 0) {
|
|
|
res.status(404).send({message: 'Receiving users not found.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 保存消息
|
|
|
privateMsg.save(message.to, message.from, message.contentType, message.content, function (err, result) {
|
|
|
if (err) {
|
|
|
throw {httpStatus: 500, message: 'Save private message failed.'};
|
|
|
res.status(500).send({message: 'Save private message failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
res.writeHead(200);
|
|
|
// 结束网络连接,后续操作继续执行
|
|
|
res.status(200).send();
|
|
|
|
|
|
// 更新自身的聊天统计信息
|
|
|
msgStats.updateP2PChatInfo(message.from,
|
|
|
message.to,
|
|
|
message.from,
|
|
|
CHANNELS.Private,
|
|
|
message.content,
|
|
|
function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
msgStats.updateP2PChatInfo(message.from, message.to, message.from, message.contentType, message.content, function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
|
|
|
// 更新对端的聊天统计信息
|
|
|
msgStats.updateP2PChatInfo(message.to,
|
|
|
message.from,
|
|
|
message.from,
|
|
|
message.contentType,
|
|
|
message.content,
|
|
|
function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
msgStats.updateP2PChatInfo(message.to, message.from, message.from, message.contentType, message.content, function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
|
|
|
// 获取对方状态,即对端的系统平台,token等信息,并推送通知消息给对端
|
|
|
user.getUserStatus(message.to, function (err, result) {
|
|
|
if (err) {
|
|
|
log.error('Get users status failed: ' + message.to);
|
|
|
|
|
|
throw {httpStatus: 500, message: 'Find target users failed.'};
|
|
|
log.error('Get target user status for private message failed: ' + message.to);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 构建通知消息
|
|
@ -228,57 +224,49 @@ router.post(APIv1.Chats.PM, function (req, res) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var notifyMessage = JSON.stringify({type: 'p2p_msg', from: message.from});
|
|
|
var notifyMessage = JSON.stringify({type: 'p2p_msg', from_uid: message.from});
|
|
|
|
|
|
// 保存通知消息到数据库中并根据用户在线状态推送此消息
|
|
|
notifyMsg.saveNotifyMessage(message.to,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
pushable,
|
|
|
function (err, result) {
|
|
|
if (err) {
|
|
|
log.error('Save private notify message failed, ', err);
|
|
|
} else {
|
|
|
if (pushable === true) {
|
|
|
if (data.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(message.to,
|
|
|
data.token,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
function (err, result) {
|
|
|
if (err != null) {
|
|
|
console.log(err);
|
|
|
} else {
|
|
|
console.log(result);
|
|
|
}
|
|
|
});
|
|
|
} else if (data.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(data.client_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
data.status,
|
|
|
function (err, result) {
|
|
|
if (err != null) {
|
|
|
console.log(err);
|
|
|
} else {
|
|
|
console.log(result);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
notifyMsg.save(message.to, message.contentType, title, content, notifyMessage, pushable, function (err, result) {
|
|
|
if (err) {
|
|
|
log.error('Save private notify message failed, ', err);
|
|
|
} else {
|
|
|
if (pushable === true) {
|
|
|
if (target.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(message.to,
|
|
|
target.token,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
function (err, result) {
|
|
|
if (err != null) {
|
|
|
console.log(err);
|
|
|
} else {
|
|
|
console.log(result);
|
|
|
}
|
|
|
});
|
|
|
} else if (target.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(data.client_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
target.status,
|
|
|
function (err, result) {
|
|
|
if (err != null) {
|
|
|
console.log(err);
|
|
|
} else {
|
|
|
console.log(result);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
|
|
|
res.writeHead(200);
|
|
|
});
|
|
|
|
|
|
/**
|
|
@ -304,58 +292,62 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
}
|
|
|
|
|
|
// 字段判断
|
|
|
if (message.from == null || message.group == null || message.contentType == null || message.content == null) {
|
|
|
throw {httpStatus: 406, message: 'Missing fields.'}
|
|
|
var testing = objectUtil.fieldsCheck(message, 'from', 'at', 'group', 'groupType', 'contentType', 'content');
|
|
|
if (!testing.pass) {
|
|
|
throw {httpStatus: 406, message: testing.message}
|
|
|
}
|
|
|
|
|
|
// 消息处理
|
|
|
group.isGroupMember(message.group, message.groupType, message.from, function (err, result) {
|
|
|
if (err) {
|
|
|
throw {httpStatus: 500, message: 'Check group member failed.'};
|
|
|
log.error('Check group member failed: ', err);
|
|
|
|
|
|
res.status(500).send({message: 'Check group member failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (result.length == 0) {
|
|
|
throw {httpStatus: 404, message: 'Group member not found. Member id: ' + message.from};
|
|
|
res.status(404).send({message: 'Member with id "' + message.from + '" is not in group "' + message.group + '"'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 保存群组消息
|
|
|
groupMsg.saveMessage(message.from, message.group, message.at, message.contentType, message.content, function (err, result) {
|
|
|
groupMsg.save(message.from, message.group, message.at, message.contentType, message.content, function (err, result) {
|
|
|
if (err) {
|
|
|
throw {httpStatus: 500, message: 'Save group message failed.'};
|
|
|
log.error('Save group message failed: ', err);
|
|
|
|
|
|
res.status(500).send({message: 'Save group message failed.'});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
res.writeHead(200);
|
|
|
|
|
|
// 统计信息
|
|
|
msgStats.updateGroupChatInfo(message.from,
|
|
|
message.group,
|
|
|
message.from,
|
|
|
0,
|
|
|
message.contentType,
|
|
|
message.content,
|
|
|
false,
|
|
|
function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
// 关闭网络连接后执行后续操作
|
|
|
res.status(200).send();
|
|
|
|
|
|
// 更新组内统计信息
|
|
|
msgStats.updateGroupChatInfo(message.from, message.group, message.from, 0, message.contentType, message.content, false, function (err, result) {
|
|
|
if (err) log.error(err);
|
|
|
});
|
|
|
|
|
|
// 推送通知消息给群组成员
|
|
|
group.getMembers(message.group, message.groupType, function (err, result) {
|
|
|
if (err) {
|
|
|
log.error('Get group members failed: ', err);
|
|
|
throw {httpStatus: 500, message: 'Get group members failed.'};
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (result.length == 0) {
|
|
|
log.warn('No members in group ', message.group);
|
|
|
log.warn('No members in group ', message.group,
|
|
|
message.groupType === GROUP_TYPE.AdminTeam ? " of admin team." : "of discussion group.");
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// 逐个推送通知
|
|
|
for (var nIndex = 0; nIndex < result.length; nIndex++) {
|
|
|
var member = result[nIndex];
|
|
|
if (member.member_code === message.from) continue;
|
|
|
if (member.user_id === message.from) continue;
|
|
|
|
|
|
user.getUserStatus(member.member_code, function (err, result) {
|
|
|
user.getUserStatus(member.user_id, function (err, result) {
|
|
|
if (err) {
|
|
|
console.error('Get group member status failed: ', err);
|
|
|
return;
|
|
@ -378,13 +370,15 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
}
|
|
|
|
|
|
var pushable = result.length > 0 && result[0].is_online === 1;
|
|
|
var notifyMessage = JSON.stringify({type: 'group_msg', groupId: message.group});
|
|
|
var notifyMessage = JSON.stringify({type: 'group_msg', gid: message.group});
|
|
|
|
|
|
// 发送并保存通知到数据库中
|
|
|
if (pushable) {
|
|
|
if (data.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(member.member_code,
|
|
|
data.token,
|
|
|
var userStatus = result[0];
|
|
|
|
|
|
if (userStatus.platform === PLATFORMS.iOS) {
|
|
|
getui.pushAPN(member.user_id,
|
|
|
userStatus.token,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
@ -393,7 +387,7 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
err != null ? console.error(err) : console.log(result);
|
|
|
|
|
|
// 这段代码重复
|
|
|
notifyMsg.saveNotifyMessage(member.member_code,
|
|
|
notifyMsg.save(member.user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
@ -407,18 +401,18 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
} else if (data.platform === PLATFORMS.Android) {
|
|
|
} else if (userStatus.platform === PLATFORMS.Android) {
|
|
|
getui.pushAndroid(data.client_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
|
notifyMessage,
|
|
|
data.status,
|
|
|
userStatus.status,
|
|
|
function (err, result) {
|
|
|
err != null ? console.error(err) : console.log(result);
|
|
|
|
|
|
// 这段代码重复
|
|
|
notifyMsg.saveNotifyMessage(member.member_code,
|
|
|
notifyMsg.save(member.user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
@ -435,7 +429,7 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
}
|
|
|
} else {
|
|
|
// 这段代码重复
|
|
|
notifyMsg.saveNotifyMessage(member.member_code,
|
|
|
notifyMsg.save(member.user_id,
|
|
|
message.contentType,
|
|
|
title,
|
|
|
content,
|
|
@ -451,13 +445,11 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 统计信息
|
|
|
// 统计'@'信息
|
|
|
var at = 0;
|
|
|
if (message.at == member.member_code) {
|
|
|
at = 1;
|
|
|
}
|
|
|
if (message.at == member.user_id) at = 1;
|
|
|
|
|
|
msgStats.updateGroupChatInfo(member.member_code,
|
|
|
msgStats.updateGroupChatInfo(member.user_id,
|
|
|
message.group,
|
|
|
message.from,
|
|
|
at,
|
|
@ -489,7 +481,7 @@ router.post(APIv1.Chats.GM, function (req, res) {
|
|
|
* 请求URL:
|
|
|
* /pm?user_id=sand&peer_id=Rose&message_start_id=0&count=20
|
|
|
*/
|
|
|
router.get(APIv1.Chats.PM, function (req, res) {
|
|
|
router.get(APIv1.Chats.PM, function (req, res) {
|
|
|
var userId = req.query.user_id;
|
|
|
var peerId = req.query.peer_id;
|
|
|
var msgStartId = req.query.message_start_id === null ? MAX_INT : parseInt(req.query.message_start_id);
|
|
@ -499,7 +491,7 @@ router.get(APIv1.Chats.PM, function (req, res) {
|
|
|
throw {httpStatus: 400, message: "Missing field."};
|
|
|
}
|
|
|
|
|
|
privateMsg.findMessage(userId, peerId, msgStartId, count, function (err, rows) {
|
|
|
privateMsg.findByGroupId(userId, peerId, msgStartId, count, function (err, rows) {
|
|
|
if (err) {
|
|
|
log.error("Get private message failed, ", err);
|
|
|
|
|
@ -537,7 +529,7 @@ router.get(APIv1.Chats.PM, function (req, res) {
|
|
|
* 请求URL:
|
|
|
* /gm?user_id=sand&group_id=discussionGroup&message_start_id=0&count=20
|
|
|
*/
|
|
|
router.get(APIv1.Chats.GM, function (req, res) {
|
|
|
router.get(APIv1.Chats.GM, function (req, res) {
|
|
|
var groupId = req.query.group_id;
|
|
|
var userId = req.query.user_id;
|
|
|
var msgStartId = req.query.message_start_id === null ? MAX_INT : parseInt(req.query.message_start_id);
|
|
@ -547,7 +539,7 @@ router.get(APIv1.Chats.GM, function (req, res) {
|
|
|
throw {httpStatus: 400, message: "Missing field."};
|
|
|
}
|
|
|
|
|
|
groupMsg.findMessage(groupId, msgStartId, count, function (err, rows) {
|
|
|
groupMsg.findByGroupId(groupId, msgStartId, count, function (err, rows) {
|
|
|
if (err) {
|
|
|
console.log('Get group message failed: ', err);
|
|
|
|
|
@ -718,8 +710,8 @@ router.get(APIv1.Chats.GMStats, function (req, res) {
|
|
|
* peer_id:聊天对端id
|
|
|
*/
|
|
|
router.get(APIv1.Chats.PMStats, function (req, res) {
|
|
|
var userId = req.query.user_id;
|
|
|
var peerId = req.query.peer_id;
|
|
|
var userId = req.query.user_id;
|
|
|
var peerId = req.query.peer_id;
|
|
|
if (userId == null || peerId == null) {
|
|
|
throw {httpStatus: 406, message: "Missing fields."};
|
|
|
}
|