forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathNodeDomain.js
More file actions
1 lines (1 loc) · 2.27 KB
/
NodeDomain.js
File metadata and controls
1 lines (1 loc) · 2.27 KB
1
define(function(require,exports,module){var NodeConnection=require("utils/NodeConnection"),EventDispatcher=require("utils/EventDispatcher"),EVENT_NAMESPACE=".NodeDomainEvent";function NodeDomain(domainName,domainPath){var connection=new NodeConnection;this.connection=connection,this._domainName=domainName,this._domainPath=domainPath,this._domainLoaded=!1,this._load=this._load.bind(this),this._connectionPromise=connection.connect(!0).then(this._load),connection.on("close",function(event,promise){this.connection.off(EVENT_NAMESPACE),this._domainLoaded=!1,this._connectionPromise=promise.then(this._load)}.bind(this))}EventDispatcher.makeEventDispatcher(NodeDomain.prototype),NodeDomain.prototype.connection=null,NodeDomain.prototype._connectionPromise=null,NodeDomain.prototype._domainName=null,NodeDomain.prototype._domainPath=null,NodeDomain.prototype._domainLoaded=!1,NodeDomain.prototype._load=function(){var connection=this.connection;return connection.loadDomains(this._domainPath,!0).done(function(){var eventNames;this._domainLoaded=!0,this._connectionPromise=null,Object.keys(connection.domainEvents[this._domainName]).forEach(function(domainEvent){var connectionEvent=this._domainName+":"+domainEvent+EVENT_NAMESPACE;connection.on(connectionEvent,function(){var params=Array.prototype.slice.call(arguments,1);EventDispatcher.triggerWithArray(this,domainEvent,params)}.bind(this))},this)}.bind(this)).fail(function(err){console.error('[NodeDomain] Error loading domain "'+this._domainName+'": '+err)}.bind(this))},NodeDomain.prototype.ready=function(){return this._domainLoaded&&this.connection.connected()},NodeDomain.prototype.promise=function(){if(this._connectionPromise)return this._connectionPromise;var deferred=new $.Deferred;return this.ready()?deferred.resolve():deferred.reject(),deferred.promise()},NodeDomain.prototype.exec=function(name){var connection=this.connection,params=Array.prototype.slice.call(arguments,1),execConnected=function(){var domain=connection.domains[this._domainName],fn=domain&&domain[name],execResult;return execResult=fn?fn.apply(domain,params):(new $.Deferred).reject().promise()}.bind(this),result;return result=this.ready()?execConnected():this._connectionPromise?this._connectionPromise.then(execConnected):(new $.Deferred.reject).promise()},module.exports=NodeDomain});