home *** CD-ROM | disk | FTP | other *** search
- package netscape.netcast.application;
-
- public class NSTimer implements Runnable {
- public static NSTimer master = new NSTimer();
- TimerEntry first;
- TimerEntry current;
- Thread thread;
-
- public void add(TimerClient var1) {
- this.add(var1, System.currentTimeMillis(), (Object)null);
- }
-
- public void add(TimerClient var1, long var2, Object var4) {
- DebugManager.println("ADD: " + var1);
- TimerEntry var5 = new TimerEntry();
- var5.tm = var2;
- var5.client = var1;
- var5.arg = var4;
- this.add(var5);
- }
-
- synchronized void add(TimerEntry var1) {
- TimerEntry var2 = null;
-
- for(TimerEntry var3 = this.first; var3 != null; var3 = var3.next) {
- if (var3.client == var1.client && var3.arg == var1.arg) {
- if (var2 != null) {
- var2.next = var3.next;
- } else {
- this.first = var3.next;
- }
- break;
- }
-
- var2 = var3;
- }
-
- if (this.first != null && this.first.tm <= var1.tm) {
- TimerEntry var4;
- for(var4 = this.first; var4.next != null && var1.tm >= var4.next.tm; var4 = var4.next) {
- }
-
- var1.next = var4.next;
- var4.next = var1;
- } else {
- var1.next = this.first;
- this.first = var1;
- }
-
- if (this.thread == null) {
- this.thread = ThreadUtil.forkSystem("NSTimer", this);
- } else {
- this.notify();
- }
- }
-
- public void remove(TimerClient var1) {
- this.remove(var1, (Object)null);
- }
-
- public synchronized void remove(TimerClient var1, Object var2) {
- DebugManager.println("REMOVE: " + var1);
- if (this.current != null && var1 == this.current.client && var2 == this.current.arg) {
- this.current = null;
- this.notify();
- } else {
- if (this.first != null) {
- if (this.first.client == var1 && this.first.arg == var2) {
- this.first = this.first.next;
- this.notify();
- return;
- }
-
- for(TimerEntry var3 = this.first; var3.next != null; var3 = var3.next) {
- if (var3.next.client == var1 && var3.next.arg == var2) {
- var3.next = var3.next.next;
- this.notify();
- return;
- }
- }
- }
-
- }
- }
-
- public void run() {
- try {
- while(true) {
- synchronized(this){}
-
- try {
- while(this.first == null) {
- this.wait(1000L);
- if (this.first == null) {
- DebugManager.println("Stop the clock!");
- this.thread = null;
- return;
- }
- }
-
- long var1 = this.first.tm - System.currentTimeMillis();
- if (var1 > 0L) {
- DebugManager.println("Waiting: " + var1);
- this.wait(var1);
- } else {
- Thread.sleep(20L);
- }
- } catch (Throwable var29) {
- throw var29;
- }
-
- long var31 = System.currentTimeMillis();
-
- while(true) {
- synchronized(this){}
-
- TimerEntry var3;
- try {
- if (this.first == null || this.first.tm > var31) {
- break;
- }
-
- DebugManager.println("click: " + this.first.arg);
- var3 = this.current = this.first;
- this.first = this.first.next;
- var3.next = null;
- DebugManager.println("past click");
- } catch (Throwable var25) {
- throw var25;
- }
-
- Thread.yield();
-
- try {
- DebugManager.println("before alarm");
- long var4 = var3.client.acmeAlarm(var3.tm, var3.arg);
- DebugManager.println("past alarm");
- synchronized(this){}
-
- try {
- if (this.current != null && var4 > 0L) {
- var3.tm = var4;
- this.add(var3);
- }
- } catch (Throwable var26) {
- throw var26;
- }
- } catch (ThreadDeath var27) {
- throw var27;
- } catch (Throwable var28) {
- var28.printStackTrace();
- }
-
- this.current = null;
- }
- }
- } catch (InterruptedException var30) {
- }
- }
- }
-