ModuleBase.define("InviteManager", ["Invite","Error"], function(Invite, Error) {
/**
* @desc InviteManager构造函数。
* @constructor
* @alias InviteManager
*/
var InviteManager = function() {
/**
* @desc InviteManager级别回调的枚举
* @readonly
* @enum {string}
*/
this.InviteManagerCallbackEnum = {
CALL_NOTIFY: 'call.notify',
};
this.invites = {};
this.eventEmitter = new EventEmitter();
};
/**
* @desc 创建邀请对象
* @param {String} fromUserId - 邀请发起方用户id
* @param {String} toUserId - 邀请接受方用户id
* @param {Object} options -参数
*/
InviteManager.prototype.createInvite = function(fromUserId,toUserId,options){
var invite = new Invite(fromUserId,toUserId,options);
this.invites[invite.inviteId] = invite;
return invite;
}
/**
* @desc 通过ID获取Invite对象
* @param {string} InviteId - InviteId
*/
InviteManager.prototype.getInvite = function(InviteId){
var invite = this.invites[InviteId];
return invite;
}
/**
* @desc 发启邀请
* @param {Object} callInvite -邀请对象
*/
InviteManager.prototype.call = function(callInvite){
var deferred = when.defer();
callInvite.callInner().then(function() {
log.debug("===InviteManager.call(),success");
deferred.resolve();
}).otherwise(function(error) {
log.debug("===InviteManager.call(),error:",error);
deferred.reject(error);
});
return deferred.promise;
}
/**
* @desc emitCallNotify
* @ignore
*/
InviteManager.prototype.emitCallNotify = function(inviteId,fromUserId,toUserId,options){
var optionsObj = null;
if(options){
optionsObj = JSON.parse(options);
}
var invite = new Invite(toUserId,fromUserId,optionsObj); //接受到提请的invite对象,把fromUserId与toUserId反一下
invite.inviteId = inviteId;
this.invites[invite.inviteId] = invite;
invite.onCallTimeOutInner();
this.eventEmitter.emit(this.InviteManagerCallbackEnum.CALL_NOTIFY,invite);
}
/**
* @desc addCallback
* @param {Object} type
* @param {Object} callback
*
* @example
* inviteManager.addCallback(inviteManager.InviteManagerCallbackEnum.CALL_NOTIFY, onCall);
*
* 邀请回调
* param:invite - 邀请对象
* function onCall(invite){
* }
*
*
*/
InviteManager.prototype.addCallback = function(type, callback) {
this.eventEmitter.on(type, callback);
};
return InviteManager;
});