PHP Classes
elePHPant
Icontem

File: FrontEndScripts/libs/Nemiro/TryAction.ts

Recommend this page to a friend!
  Classes of Aleksey Nemiro  >  PHP Small Server Administrator  >  FrontEndScripts/libs/Nemiro/TryAction.ts  >  Download  
File: FrontEndScripts/libs/Nemiro/TryAction.ts
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: PHP Small Server Administrator
Web panel for small Debian and Ubuntu servers
Author: By
Last change:
Date: 3 years ago
Size: 2,136 bytes
 

 

Contents

Class file image Download
?/*
 * Copyright  Aleksey Nemiro, 2015. All rights reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
module Nemiro {

  /** 
   * The class allows you to perform the specified action and automatically repeated if an error occurs.
   */
  export class TryAction {

    /** The action to execution. */
    public Action: { (): void; } = null;

    /** The maximum number of attempts. Default: 10. */
    public MaxAttempts: number = 10;

    /** 
     * The duration of pauses between attempts (in seconds).
     * Minus one - automatically (by default).
     */
    public Pause: number = -1;

    /** Attempts counter. */
    private Attempts: number = 0;

    constructor(action: { (): void; }) {
      if (action == null) {
        throw Error('Action is required.');
      }

      this.Action = action;
    }

    /** Executes the task. */
    public Run(): void {
      this.Attempts++;

      if (this.Attempts > this.MaxAttempts) {
        throw new Error('Reached the allowable limit of attempts to perform a task.');
      }

      // ???? ??? ?? ?????? ???????, ?????? ?????
      if (this.Attempts > 1) {
        var pause = 0;

        if (this.Pause == -1) {
          if (this.Attempts <= 5) {
            pause = ((this.Attempts % 2) == 0 ? 2000 : 4000);
          } else {
            pause = ((this.Attempts % 2) == 0 ? 4000 : 8000);
          }
        } else {
          pause = this.Pause * 1000;
        }

        console.log('Pause', pause / 1000)
        window.setTimeout(this.Action, pause);
      } else {
        this.Action();
      }
    }

  }

}