Browse Source

add ReconnectContext class

Yuki Takei 5 years ago
parent
commit
926e5cd592
1 changed files with 36 additions and 0 deletions
  1. 36 0
      src/server/service/search-reconnect-context/reconnect-context.js

+ 36 - 0
src/server/service/search-reconnect-context/reconnect-context.js

@@ -0,0 +1,36 @@
+class ReconnectContext {
+
+  constructor() {
+    this.reset(true);
+  }
+
+  reset() {
+    this.counter = 0;
+    this.stage = 1;
+  }
+
+  incrementCount() {
+    this.counter++;
+  }
+
+  incrementStage() {
+    this.counter = 0; // reset counter
+    this.stage++;
+  }
+
+  get shouldReconnect() {
+    const thresholdOfThisStage = 10 * Math.log2(this.stage); // 0, 10, 15.9, 20, 23.2, 25.9, 28.1, 30, ...
+    return this.counter > thresholdOfThisStage;
+  }
+
+}
+
+function nextTick(context) {
+  context.incrementCount();
+  return context.shouldReconnect;
+}
+
+module.exports = {
+  ReconnectContext,
+  nextTick,
+};