Sha256: f2a5d66d4366a79af59ff84d500d1f93a7d2566025e3eadd57c307c4701d1926

Contents?: true

Size: 1.46 KB

Versions: 26

Compression:

Stored size: 1.46 KB

Contents

import logger from "./logger"

// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.
// Internal class, not intended for direct user manipulation.

class SubscriptionGuarantor {
  constructor(subscriptions) {
    this.subscriptions = subscriptions
    this.pendingSubscriptions = []
  }

  guarantee(subscription) {
    if(this.pendingSubscriptions.indexOf(subscription) == -1){ 
      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)
      this.pendingSubscriptions.push(subscription) 
    }
    else {
      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)
    }
    this.startGuaranteeing()
  }

  forget(subscription) {
    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)
    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))
  }

  startGuaranteeing() {
    this.stopGuaranteeing()
    this.retrySubscribing()
  }
  
  stopGuaranteeing() {
    clearTimeout(this.retryTimeout)
  }

  retrySubscribing() {
    this.retryTimeout = setTimeout(() => {
      if (this.subscriptions && typeof(this.subscriptions.subscribe) === "function") {
        this.pendingSubscriptions.map((subscription) => {
          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)
          this.subscriptions.subscribe(subscription)
        })
      }
    }
    , 500)
  }
}

export default SubscriptionGuarantor

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.25 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.24 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.23 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.22 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.21 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.20 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.19 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.18 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.17 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.16 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.15 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.14 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.13 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.12 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.11 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.10 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.9 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.8 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js
clapton-0.0.7 lib/clapton/javascripts/node_modules/@rails/actioncable/src/subscription_guarantor.js