UNPKG

ziron-server

Version:
1 lines 2.24 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const ziron_engine_1=require("ziron-engine"),ExternalBrokerClient_1=require("./ExternalBrokerClient"),ChannelExchange_1=require("../ChannelExchange");class InternalBroker{constructor(e){this.externalBrokerClient=ExternalBrokerClient_1.defaultExternalBrokerClient,this.exchangeChannels=new Set,this.socketSubscriptions=new Set,this._server=e,this._publishToPublisher=e.options.publishToPublisher,this.exchange=new ChannelExchange_1.default({subscriptions:this.exchangeChannels,subscribe:this._exchangeSubscribe.bind(this),unsubscribe:this._exchangeUnsubscribe.bind(this),publish:(e,s,i)=>{this.publish(e,s,null==i?void 0:i.processComplexTypes,null==i?void 0:i.publisher)}})}getSubscriptions(){return Array.from(new Set([...this.exchangeChannels,...this.socketSubscriptions]).values())}processExternalPublish(e,s,i){this._processPublish(e,s,i,!0)}_exchangeSubscribe(e){this.exchangeChannels.has(e)||(this.exchangeChannels.add(e),this.socketSubscriptions.has(e)||this.externalBrokerClient.subscribe(e))}_exchangeUnsubscribe(e){this.exchangeChannels.delete(e)&&(this.socketSubscriptions.has(e)||this.externalBrokerClient.unsubscribe(e))}socketSubscribe(e,s){this.socketSubscriptions.has(s)||(this.exchangeChannels.has(s)||this.externalBrokerClient.subscribe(s),this.socketSubscriptions.add(s)),e._socket.subscribe("C"+s)}socketUnsubscribe(e,s){if(this.socketSubscriptions.has(s)){const i="C"+s;e.open&&e._socket.unsubscribe(i),this._server._app.numSubscribers(i)<=0&&(this.socketSubscriptions.delete(s),this.exchangeChannels.has(s)||this.externalBrokerClient.unsubscribe(s))}}publish(e,s,i=!1,t){this.externalBrokerClient.publish(e,s,i),this._processPublish(e,s,i,!1,this._publishToPublisher?void 0:t)}_processPublish(e,s,i,t,n){if(this.exchangeChannels.has(e)&&this.exchange._emitPublish(e,s,t,i),this.socketSubscriptions.has(e)){const t=ziron_engine_1.Transport.prepareMultiTransmit("#0",[e,s],{processComplexTypes:i}),r=n?n._socket:this._server._app,h=t.length,l="C"+e;r.publish(l,t[0],!1,this._server._shouldCompress(t[0])),h>1&&r.publish(l,t[1],!0,this._server._shouldCompress(t[1],!0))}}terminate(){this.externalBrokerClient.terminate()}}exports.default=InternalBroker;