Your IP : 18.191.200.21


Current Path : /home/bitrix/ext_www/rk_shared_core/bitrix/js/im/call/
Upload File :
Current File : /home/bitrix/ext_www/rk_shared_core/bitrix/js/im/call/abstract_call.js

;(function()
{
	/**
	 * Abstract call class
	 * Public methods:
	 * - inviteUsers
	 * - cancel
	 * - answer
	 * - decline
	 * - hangup
	 *
	 * Events:
	 * - onUserStateChanged
	 * - onStreamReceived
	 * - onStreamRemoved
	 * - onCallFailure
	 * - onDestroy
	 *
	 */

	BX.namespace('BX.Call');

	BX.Call.AbstractCall = function(params)
	{
		var self = this;
		this.id = params.id;
		this.instanceId = params.instanceId;
		this.parentId = params.parentId || null;
		this.direction = params.direction;

		this.debug = params.debug || false;

		this.ready = false;
		this.userId = BX.Call.Engine.getInstance().getCurrentUserId();

		this.initiatorId = params.initiatorId || '';
		this.users = BX.type.isArray(params.users) ? params.users.filter(function(userId){return userId != self.userId}) : [];

		this.associatedEntity = BX.type.isPlainObject(params.associatedEntity) ? params.associatedEntity : {};

		// media constraints
		this.videoEnabled = params.videoEnabled === true;
		this.cameraId = params.cameraId || '';
		this.microphoneId = params.microphoneId || '';

		this.muted = params.muted === true;

		this.localStreams =
		{
			main: null,
			screen: null
		};

		this.eventListeners = {};

		if(BX.type.isPlainObject(params.events))
		{
			this.initEventListeners(params.events);
		}
	};

	BX.Call.AbstractCall.prototype.initEventListeners = function(eventListeners)
	{
		for(var eventName in eventListeners)
		{
			this.addEventListener(eventName, eventListeners[eventName]);
		}
	};

	BX.Call.AbstractCall.prototype.addEventListener = function(eventName, listener)
	{
		if(!BX.type.isArray(this.eventListeners[eventName]))
		{
			this.eventListeners[eventName] = [];
		}
		if(BX.type.isFunction(listener))
		{
			this.eventListeners[eventName].push(listener);
		}
	};

	BX.Call.AbstractCall.prototype.removeEventListener = function(eventName, listener)
	{
		if(BX.type.isArray(this.eventListeners[eventName]) && this.eventListeners[eventName].indexOf(listener) >= 0)
		{
			var listenerIndex = this.eventListeners[eventName].indexOf(listener);
			if(listenerIndex >= 0)
			{
				this.eventListeners[eventName].splice(listenerIndex, 1);
			}
		}
	};

	BX.Call.AbstractCall.prototype.runCallback = function(eventName, eventFields)
	{
		if(BX.type.isArray(this.eventListeners[eventName]) && this.eventListeners[eventName].length > 0)
		{
			if(!BX.type.isPlainObject(eventFields))
			{
				eventFields = {};
			}
			eventFields.call = this;
			for (var i = 0; i < this.eventListeners[eventName].length; i++)
			{
				this.eventListeners[eventName][i].call(this, eventFields);
			}
		}
	};

	BX.Call.AbstractCall.prototype.getLocalStream = function(tag)
	{
		return this.localStreams[tag];
	};

	BX.Call.AbstractCall.prototype.setLocalStream = function(mediaStream, tag)
	{
		tag = tag || "main";

		this.localStreams[tag] = mediaStream;
	};

	BX.Call.AbstractCall.prototype.isVideoEnabled = function()
	{
		return this.videoEnabled;
	};

	BX.Call.AbstractCall.prototype.__onPullEvent = function(command, params)
	{
		throw new Error("__onPullEvent should be implemented");
	};

	BX.Call.AbstractCall.prototype.inviteUsers = function()
	{
		throw new Error("inviteUsers is not implemented");
	};

	BX.Call.AbstractCall.prototype.cancel = function()
	{
		throw new Error("cancel is not implemented");
	};

	BX.Call.AbstractCall.prototype.answer = function()
	{
		throw new Error("answer is not implemented");
	};

	BX.Call.AbstractCall.prototype.decline = function(code, reason)
	{
		throw new Error("decline is not implemented");
	};

	BX.Call.AbstractCall.prototype.hangup = function()
	{
		throw new Error("hangup is not implemented");
	};

	BX.Call.AbstractCall.prototype.log = function()
	{
		var text = '';
		if (BX.desktop && BX.desktop.ready())
		{
			for (var i = 0; i < arguments.length; i++)
			{
				try
				{
					text = text+' | '+(typeof(arguments[i]) == 'object'? JSON.stringify(arguments[i]): arguments[i]);
				}
				catch (e)
				{
					text = text+' | (circular structure)';
				}

			}
			BX.desktop.log(BX.message('USER_ID')+'.video.log', text.substr(3));
		}
		if (this.debug)
		{
			if (console)
			{
				var a = ['Call log; '];
				console.log.apply(this, a.concat(Array.prototype.slice.call(arguments)));
			}
		}
	};


})();