ModuleBase.define("ChatManager", ["Message","Error"], function(Message, Error) {
var ChatManager = function() {
/**
* ChatManager级别回调的枚举
* @readonly
* @enum {string}
*/
this.ChatManagerCallbackEnum = {
RECEIVE_MESSAGE_NOTIFY: 'receive.message.notify',
MESSAGE_STATUS_CHANGED_NOTIFY: 'message.status.changed.notify'
};
/**
* @desc Session Type
* @enum {number}
*/
this.SessionTypeEnum = {
peers: 1, //单聊
group: 2, //群组
chatroom: 3 //聊天室
};
/**
* @desc 消息类型
* @enum {number}
*/
this.MessageTypeEnum = {
text: 0x01, //文本
image: 0x02, //图片
file: 0x03, //文件
audio: 0x04, //声音
video: 0x05, //视频
location: 0x06, //位置
};
/**
* @desc 消息状态
* @enum {number}
*/
this.MessageStatussEnum = {
delivering: 1, //传送中(发送端)
delivered: 2, //传送成功或接收成功 (发送端及接收端)
read: 3, //已读 (接收端)
failed: 4, //传送失败(发送端)
recalled: 5 //召回(发送端及接收端)
};
this.eventEmitter = new EventEmitter();
};
ChatManager.prototype.registerGroups = function(groupIds){
if(groupIds){
for(var i = 0; i < groupIds.length; i++) {
var groupId = groupIds[i];
signalClient.rtmServer.subscribe("/g/"+groupId);
}
}
}
ChatManager.prototype.unregisterGroup = function(groupId){
if(groupId){
signalClient.rtmServer.unsubscribe("/g/"+groupId);
}
}
ChatManager.prototype.newTextMessage = function(sessionType,sessionId,content){
var self = this;
var uuid = Math.uuid();
var newMessage = new Message(uuid,sessionType, sessionId);
newMessage.sendUserId = signalClient.selfUser.userId;
newMessage.messageType = self.MessageTypeEnum.text;
newMessage.content = content;
newMessage.createTime = signalClient.getServeTime();
newMessage.status = self.MessageStatussEnum.delivering;
return newMessage;
};
ChatManager.prototype.sendMessage = function(message){
var self = this;
var deferred = when.defer();
var topic = "/u/" + message.sessionId;
if(message.sessionType != self.SessionTypeEnum.peers){
topic = "/g/" + message.sessionId;
}
signalClient.rtmServer.sendMsgData(topic,message).then(function() {
deferred.resolve();
}).otherwise(function(error) {
deferred.reject(error);
});
return deferred.promise;
}
/**
* @desc emitReceiveMessageNotify
* @ignore
*/
ChatManager.prototype.emitReceiveMessageNotify = function(fromUserId,msg_id,session_type,session_id,create_time,msg_type,msg_content){
var message = new Message(msg_id,session_type,session_id);
message.sendUserId = fromUserId;
message.messageType = msg_type;
var msgContent = new Uint8Array(msg_content);
message.content = typeConversionUtil.Uint8ArrayToString(msgContent);
message.createTime = create_time;
message.status = this.MessageStatussEnum.delivered;
this.eventEmitter.emit(this.ChatManagerCallbackEnum.RECEIVE_MESSAGE_NOTIFY,message);
}
ChatManager.prototype.sendImageMessage = function(sessionId,sessionType,imageContent,imagePath){
}
ChatManager.prototype.sendFileMessage = function(sessionId,sessionType,fileContent,filePath){
}
ChatManager.prototype.sendAudioMessage = function(sessionId,sessionType,audioContent,audioPath){
}
//已读消息
ChatManager.prototype.readMessage = function(messageId){
}
//撤回消息
ChatManager.prototype.recallMessage = function(messageId){
}
/**
* @desc ChatManager级别的回调
* @param {ChatManagerCallback} type - 回调枚举标识
* @param {Object} callback -回调方法名,可以自定义
* @example
* chatManager.addCallback(chatManager.ChatManagerCallbackEnum.RECEIVE_MESSAGE_NOTIFY, onReceiveMessageNotify);
* chatManager.addCallback(chatManager.ChatManagerCallbackEnum.MESSAGE_STATUS_CHANGED_NOTIFY, onMessageStatusChangedNotify);
*
* function onReceiveMessageNotify(message){
*
* }
*
* function onMessageStatusChangedNotify(messageStatus,sessionId,sesstionType,messageId){
*
* }
*
*/
ChatManager.prototype.addCallback = function(type, callback) {
this.eventEmitter.on(type, callback);
};
ChatManager.prototype.offCallback = function(types) {
for(var key in types) {
var type = types[key];
this.eventEmitter.off(type);
}
};
return ChatManager;
});