UNPKG

ziron-worker

Version:
1 lines 3.19 kB
"use strict";var __awaiter=this&&this.__awaiter||function(t,e,i,n){return new(i||(i=Promise))((function(r,s){function o(t){try{c(n.next(t))}catch(t){s(t)}}function l(t){try{c(n.throw(t))}catch(t){s(t)}}function c(t){var e;t.done?r(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,l)}c((n=n.apply(t,e||[])).next())}))};Object.defineProperty(exports,"__esModule",{value:!0});const ziron_client_1=require("ziron-client"),Utils_1=require("../Utils"),Constants_1=require("../Constants"),ziron_errors_1=require("ziron-errors");class BrokerClientPool{get brokerUri(){return this._options.uri}constructor(t){if(this.destroyed=!1,this.onError=Constants_1.EMPTY_FUNCTION,this.onPublish=Constants_1.EMPTY_FUNCTION,this.clients=[],this._handleClientConnect=t=>{t&&(this.brokerId=t)},this._handleClientError=t=>{this.onError(new ziron_errors_1.NamedError("PoolClientError",t.stack))},this._handleClientPublish=(t,e,i)=>{this.onPublish(t,e,i)},this._options=t,this.clientOptions=this._buildSocketOptions(),this._options.poolSize<1)throw new Error("Pool size must be greater than 0");this._fillPool()}_fillPool(){const t=this._options.poolSize;let e;for(let i=0;i<t;i++)e=new ziron_client_1.Socket(Object.assign({},this.clientOptions)),e.on("error",this._handleClientError),e.onPublish(this._handleClientPublish),e.on("connect",this._handleClientConnect),e.connect().catch(()=>{}),this.clients[i]=e}_selectClient(t){return this.clients[(0,Utils_1.hashToIndex)(t,this.clients.length)]}_buildSocketOptions(){return Object.assign(ziron_client_1.Socket.parseOptionsFromUrl(this._options.uri),{ackTimeout:3e3,connectTimeout:3e3,invokeSendTimeout:null,transmitSendTimeout:null,autoReconnect:{active:!0,initialDelay:1e3,randomness:1e3,multiplier:1,maxDelay:2e3},handshakeAttachment:{secret:this._options.joinTokenSecret,clusterVersion:this._options.clusterVersion}})}subscribe(t){return __awaiter(this,void 0,void 0,(function*(){try{yield this._selectClient(t).subscribe(t)}catch(t){this.onError(new ziron_errors_1.NamedError("PoolClientSubscribeFail",(0,Utils_1.stringifyError)(t)))}}))}unsubscribe(t){return __awaiter(this,void 0,void 0,(function*(){try{return this._selectClient(t).unsubscribe(t)}catch(t){this.onError(new ziron_errors_1.NamedError("PoolClientUnsubscribeFail",(0,Utils_1.stringifyError)(t)))}}))}publish(t,e,i){return __awaiter(this,void 0,void 0,(function*(){try{yield this._selectClient(t).publish(t,e,{processComplexTypes:i})}catch(t){this.onError(new ziron_errors_1.NamedError("PoolClientPublishFail",(0,Utils_1.stringifyError)(t)))}}))}invoke(t,e,i={}){return this._selectClient(t).invoke(t,e,i)}transmit(t,e,i={}){return this._selectClient(t).transmit(t,e,i)}getSubscriptions(t=!1){const e=[];for(let i=0;i<this.clients.length;i++)e.push(...this.clients[i].getSubscriptions(t));return e}hasSubscribed(t,e=!1){return this._selectClient(t).hasSubscribed(t,e)}isConnected(){for(let t=0,e=this.clients.length;t<e;t++)if(this.clients[t].isConnected())return!0;return!1}destroy(){this.destroyed=!0;const t=this.clients.length;let e;for(let i=0;i<t;i++)e=this.clients[i],e.unsubscribe(),e.disconnect(),e.off(),e.removeAllChannelListener()}}exports.default=BrokerClientPool;