home *** CD-ROM | disk | FTP | other *** search
Java Source | 1998-01-24 | 7.1 KB | 149 lines |
- package Jcd; // -- Listing-6 -- Monitor.java// 1
- // 2
- import java.lang.*; // 3
- import java.util.*; // 4
- import Jcd.Drive; // 5
- // 6
- class Monitor
- extends Observable implements Runnable { // 7
- // 8
- // Updates once a second - calls client // 9
- // object's update methods so they can
- // reflect the updates. // 10
- // 11
- // The following public status info is
- // available for the client to use.
- // 13
- public Drive cdPlayer; // 14
- public int status = Drive.STATUS_INVALID; // 15
- public int currentTrack = 0; // 16
- public int currentIndex = 0; // 17
- public int currentAddress = 0; // 18
- public int trackStartAddress = 0; // 19
- public int trackElapsed = 0; // 20
- // 21
- public boolean cdChanged = false; // 22
- public boolean trackChanged = false; // 23
- // 24
- public int cdEndAddress = -1; // 25
- public int numberOfTracks = 0; // 26
- // Info origin [1], [0] is total for CD.// 27
- public int trackAddress[] = {0}; // 28
- public int trackEndAddress[] = {0}; // 29
- public int trackLength[] = {0}; // 30
- // 31
- public String cddbID = "00000000"; // 32
- // 33
- protected int lastTrack = 0; // 34
- protected Thread updateThread = null; // 35
- // 36
- public Monitor(Drive cdPlayer) { // 37
- this.cdPlayer = cdPlayer; // 38
- } // 39
- // 40
- public void run() { // 41
- for (;;) { // 42
- int sleep = 1000; // 43
- synchronized (cdPlayer) { // 44
- updateCdInfo(); // 45
- setChanged(); // 46
- // Force notify to do its thing.
- notifyObservers(); // 47
- } // 48
- try { // 49
- Thread.sleep(sleep); // 50
- } // 51
- catch (InterruptedException e) { // 52
- } // 53
- } // 54
- } // 55
- // 56
- public void start() { // 57
- // 58
- if (updateThread == null) { // 59
- System.out.println("Starting thread");// 60
- updateThread = new Thread(this); // 61
- // Higher priority for console access
- updateThread.setPriority(6); // 62
- updateThread.start(); // 63
- } // 64
- } // 65
- // 66
- public void stop() { // 67
- if (updateThread != null && // 68
- updateThread.isAlive())
- updateThread.stop();
- updateThread = null; // 69
- } // 70
- // 71
- protected void updateCdInfo() // 72
- { // 73
- try { // 74
- cdChanged = false; // 75
- trackChanged = false; // 76
- status = cdPlayer.status(); // 77
- if (status != Drive.STATUS_INVALID) { // 78
- int cdEnd = cdPlayer.cdEndAddress();// 79
- // 80
- if (cdEnd != cdEndAddress) { // 81
- // Assumes we never get two cd's the 82
- // exact same length in a row! Breaks 83
- // if we do!
- cdEndAddress = cdEnd; // 84
- cdChanged = true; // 85
- trackChanged = true; // 86
- // 87
- cddbID = cdPlayer.cddbID(); // 88
- numberOfTracks = // 89
- cdPlayer.numberOfTracks();
- // 90
- trackAddress= new int[numberOfTracks+1];
- trackEndAddress = // 92
- new int[numberOfTracks+1];
- trackLength = new int[numberOfTracks+1];
- // 94
- for (int i=1; i<=numberOfTracks; i++) {
- trackAddress[i] = // 96
- cdPlayer.trackAddress(i);
- trackEndAddress[i] = // 97
- cdPlayer.trackEndAddress(i);
- trackLength[i] = // 98
- cdPlayer.trackLength(i);
- } // 99
- trackAddress[0] = // 100
- cdPlayer.trackAddress(Drive.LEAD_OUT);
- trackEndAddress[0] = // 101
- cdPlayer.trackEndAddress(
- Drive.LEAD_OUT);
- trackLength[0] = // 102
- cdPlayer.trackLength(Drive.LEAD_OUT);
- } // 103
- // 104
- currentTrack = cdPlayer.currentTrack();
- if (currentTrack > numberOfTracks) {// 106
- // Fishy, probably at end of CD. // 107
- // Prevent subscript out of bounds.
- currentTrack = numberOfTracks;
- } // 108
- if (currentTrack==0){ // Just in case. 109
- currentTrack = 1; // 110
- } // 111
- currentIndex = cdPlayer.currentIndex();
- currentAddress= cdPlayer.currentAddress();
- trackStartAddress = // 114
- cdPlayer.trackAddress(currentTrack);
- trackElapsed = // 115
- currentAddress - trackStartAddress;
- if (trackElapsed<0) trackElapsed=0; // 116
- if (currentTrack != lastTrack) { // 117
- trackChanged = true; // 118
- lastTrack = currentTrack; // 119
- } // 120
- } // 121
- } // 122
- catch (DriveException e) { // 123
- System.out.println("Monitor Exception "+e);
- } // 125
- } // 126
- } // 127
-