home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / browser / ns405lyc / netcast.z / ncjava10.jar / netscape / netcast / application / NSTimer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-03-09  |  3.3 KB  |  161 lines

  1. package netscape.netcast.application;
  2.  
  3. public class NSTimer implements Runnable {
  4.    public static NSTimer master = new NSTimer();
  5.    TimerEntry first;
  6.    TimerEntry current;
  7.    Thread thread;
  8.  
  9.    public void add(TimerClient var1) {
  10.       this.add(var1, System.currentTimeMillis(), (Object)null);
  11.    }
  12.  
  13.    public void add(TimerClient var1, long var2, Object var4) {
  14.       DebugManager.println("ADD: " + var1);
  15.       TimerEntry var5 = new TimerEntry();
  16.       var5.tm = var2;
  17.       var5.client = var1;
  18.       var5.arg = var4;
  19.       this.add(var5);
  20.    }
  21.  
  22.    synchronized void add(TimerEntry var1) {
  23.       TimerEntry var2 = null;
  24.  
  25.       for(TimerEntry var3 = this.first; var3 != null; var3 = var3.next) {
  26.          if (var3.client == var1.client && var3.arg == var1.arg) {
  27.             if (var2 != null) {
  28.                var2.next = var3.next;
  29.             } else {
  30.                this.first = var3.next;
  31.             }
  32.             break;
  33.          }
  34.  
  35.          var2 = var3;
  36.       }
  37.  
  38.       if (this.first != null && this.first.tm <= var1.tm) {
  39.          TimerEntry var4;
  40.          for(var4 = this.first; var4.next != null && var1.tm >= var4.next.tm; var4 = var4.next) {
  41.          }
  42.  
  43.          var1.next = var4.next;
  44.          var4.next = var1;
  45.       } else {
  46.          var1.next = this.first;
  47.          this.first = var1;
  48.       }
  49.  
  50.       if (this.thread == null) {
  51.          this.thread = ThreadUtil.forkSystem("NSTimer", this);
  52.       } else {
  53.          this.notify();
  54.       }
  55.    }
  56.  
  57.    public void remove(TimerClient var1) {
  58.       this.remove(var1, (Object)null);
  59.    }
  60.  
  61.    public synchronized void remove(TimerClient var1, Object var2) {
  62.       DebugManager.println("REMOVE: " + var1);
  63.       if (this.current != null && var1 == this.current.client && var2 == this.current.arg) {
  64.          this.current = null;
  65.          this.notify();
  66.       } else {
  67.          if (this.first != null) {
  68.             if (this.first.client == var1 && this.first.arg == var2) {
  69.                this.first = this.first.next;
  70.                this.notify();
  71.                return;
  72.             }
  73.  
  74.             for(TimerEntry var3 = this.first; var3.next != null; var3 = var3.next) {
  75.                if (var3.next.client == var1 && var3.next.arg == var2) {
  76.                   var3.next = var3.next.next;
  77.                   this.notify();
  78.                   return;
  79.                }
  80.             }
  81.          }
  82.  
  83.       }
  84.    }
  85.  
  86.    public void run() {
  87.       try {
  88.          while(true) {
  89.             synchronized(this){}
  90.  
  91.             try {
  92.                while(this.first == null) {
  93.                   this.wait(1000L);
  94.                   if (this.first == null) {
  95.                      DebugManager.println("Stop the clock!");
  96.                      this.thread = null;
  97.                      return;
  98.                   }
  99.                }
  100.  
  101.                long var1 = this.first.tm - System.currentTimeMillis();
  102.                if (var1 > 0L) {
  103.                   DebugManager.println("Waiting: " + var1);
  104.                   this.wait(var1);
  105.                } else {
  106.                   Thread.sleep(20L);
  107.                }
  108.             } catch (Throwable var29) {
  109.                throw var29;
  110.             }
  111.  
  112.             long var31 = System.currentTimeMillis();
  113.  
  114.             while(true) {
  115.                synchronized(this){}
  116.  
  117.                TimerEntry var3;
  118.                try {
  119.                   if (this.first == null || this.first.tm > var31) {
  120.                      break;
  121.                   }
  122.  
  123.                   DebugManager.println("click: " + this.first.arg);
  124.                   var3 = this.current = this.first;
  125.                   this.first = this.first.next;
  126.                   var3.next = null;
  127.                   DebugManager.println("past click");
  128.                } catch (Throwable var25) {
  129.                   throw var25;
  130.                }
  131.  
  132.                Thread.yield();
  133.  
  134.                try {
  135.                   DebugManager.println("before alarm");
  136.                   long var4 = var3.client.acmeAlarm(var3.tm, var3.arg);
  137.                   DebugManager.println("past alarm");
  138.                   synchronized(this){}
  139.  
  140.                   try {
  141.                      if (this.current != null && var4 > 0L) {
  142.                         var3.tm = var4;
  143.                         this.add(var3);
  144.                      }
  145.                   } catch (Throwable var26) {
  146.                      throw var26;
  147.                   }
  148.                } catch (ThreadDeath var27) {
  149.                   throw var27;
  150.                } catch (Throwable var28) {
  151.                   var28.printStackTrace();
  152.                }
  153.  
  154.                this.current = null;
  155.             }
  156.          }
  157.       } catch (InterruptedException var30) {
  158.       }
  159.    }
  160. }
  161.