home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / CFJava.cab / CFJavaRuntime.cab / netscape / application / TimerQueue.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-10-01  |  3.3 KB  |  174 lines

  1. package netscape.application;
  2.  
  3. import netscape.util.InconsistencyException;
  4.  
  5. class TimerQueue implements Runnable, ApplicationObserver {
  6.    Timer firstTimer;
  7.    boolean running;
  8.  
  9.    public TimerQueue() {
  10.       Application var1 = Application.application();
  11.       var1.addObserver(this);
  12.       if (var1.isRunning()) {
  13.          this.start();
  14.       }
  15.  
  16.    }
  17.  
  18.    synchronized void start() {
  19.       if (this.running) {
  20.          throw new InconsistencyException("Can't start a TimerQueue that is already running");
  21.       } else {
  22.          Thread var1 = new Thread(this, "TimerQueue");
  23.  
  24.          try {
  25.             if (var1.getPriority() > 1) {
  26.                var1.setPriority(var1.getPriority() - 1);
  27.             }
  28.  
  29.             var1.setDaemon(true);
  30.          } catch (SecurityException var2) {
  31.          }
  32.  
  33.          var1.start();
  34.          this.running = true;
  35.       }
  36.    }
  37.  
  38.    synchronized void stop() {
  39.       this.running = false;
  40.       this.notify();
  41.    }
  42.  
  43.    synchronized void addTimer(Timer var1, long var2) {
  44.       if (!var1.running) {
  45.          Timer var4 = null;
  46.  
  47.          Timer var5;
  48.          for(var5 = this.firstTimer; var5 != null && var5.expirationTime <= var2; var5 = var5.nextTimer) {
  49.             var4 = var5;
  50.          }
  51.  
  52.          if (var4 == null) {
  53.             this.firstTimer = var1;
  54.          } else {
  55.             var4.nextTimer = var1;
  56.          }
  57.  
  58.          var1.expirationTime = var2;
  59.          var1.nextTimer = var5;
  60.          var1.running = true;
  61.          this.notify();
  62.       }
  63.    }
  64.  
  65.    synchronized void removeTimer(Timer var1) {
  66.       if (var1.running) {
  67.          Timer var3 = null;
  68.          Timer var4 = this.firstTimer;
  69.  
  70.          boolean var2;
  71.          for(var2 = false; var4 != null; var4 = var4.nextTimer) {
  72.             if (var4 == var1) {
  73.                var2 = true;
  74.                break;
  75.             }
  76.  
  77.             var3 = var4;
  78.          }
  79.  
  80.          if (var2) {
  81.             if (var3 == null) {
  82.                this.firstTimer = var1.nextTimer;
  83.             } else {
  84.                var3.nextTimer = var1.nextTimer;
  85.             }
  86.  
  87.             var1.expirationTime = 0L;
  88.             var1.nextTimer = null;
  89.             var1.running = false;
  90.          }
  91.       }
  92.    }
  93.  
  94.    synchronized boolean containsTimer(Timer var1) {
  95.       return var1.running;
  96.    }
  97.  
  98.    synchronized long postExpiredTimers() {
  99.       long var3;
  100.       do {
  101.          Timer var5 = this.firstTimer;
  102.          if (var5 == null) {
  103.             return 0L;
  104.          }
  105.  
  106.          long var1 = System.currentTimeMillis();
  107.          var3 = var5.expirationTime - var1;
  108.          if (var3 <= 0L) {
  109.             var5.post(var1);
  110.             this.removeTimer(var5);
  111.             if (var5.repeats()) {
  112.                this.addTimer(var5, var1 + (long)var5.delay());
  113.             }
  114.  
  115.             try {
  116.                this.wait(1L);
  117.             } catch (InterruptedException var6) {
  118.             }
  119.          }
  120.       } while(var3 <= 0L);
  121.  
  122.       return var3;
  123.    }
  124.  
  125.    public synchronized void run() {
  126.       while(this.running) {
  127.          long var1 = this.postExpiredTimers();
  128.  
  129.          try {
  130.             this.wait(var1);
  131.          } catch (InterruptedException var3) {
  132.          }
  133.       }
  134.  
  135.    }
  136.  
  137.    public synchronized String toString() {
  138.       StringBuffer var1 = new StringBuffer();
  139.       var1.append("TimerQueue (");
  140.       Timer var2 = this.firstTimer;
  141.  
  142.       while(var2 != null) {
  143.          var1.append(var2.toString());
  144.          var2 = var2.nextTimer;
  145.          if (var2 != null) {
  146.             var1.append(", ");
  147.          }
  148.       }
  149.  
  150.       var1.append(")");
  151.       return var1.toString();
  152.    }
  153.  
  154.    public void focusDidChange(Application var1, View var2) {
  155.    }
  156.  
  157.    public void currentDocumentDidChange(Application var1, Window var2) {
  158.    }
  159.  
  160.    public void applicationDidPause(Application var1) {
  161.    }
  162.  
  163.    public void applicationDidResume(Application var1) {
  164.    }
  165.  
  166.    public synchronized void applicationDidStart(Application var1) {
  167.       this.start();
  168.    }
  169.  
  170.    public synchronized void applicationDidStop(Application var1) {
  171.       this.stop();
  172.    }
  173. }
  174.