Code refactoring. Now RfbPlayer maintains FbsInputStream and RfbProto instances separately. Also, RfbProto does not need FbsInputStream any more, it can work with any InputStream.
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2589 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
index 98b1505..8cff6e1 100644
--- a/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
+++ b/java/src/com/tightvnc/rfbplayer/RfbPlayer.java
@@ -52,6 +52,7 @@
String[] mainArgs;
+ FbsInputStream fbs;
RfbProto rfb;
Thread rfbThread;
@@ -134,7 +135,9 @@
} else {
url = new URL(sessionURL);
}
- rfb = new RfbProto(url, initialTimeOffset);
+ newFbsConnection();
+ fbs.setTimeOffset(initialTimeOffset);
+ rfb = new RfbProto(fbs);
vc = new VncCanvas(this);
gbc.weightx = 1.0;
@@ -178,19 +181,23 @@
while (!isQuitting) {
try {
setPaused(!autoPlay);
- rfb.fbs.setSpeed(playbackSpeed);
+ fbs.setSpeed(playbackSpeed);
vc.processNormalProtocol();
} catch (EOFException e) {
+ long newTimeOffset;
if (e.getMessage() != null && e.getMessage().equals("[REWIND]")) {
// A special type of EOFException allowing us to seek backwards.
- initialTimeOffset = rfb.fbs.getSeekOffset();
- autoPlay = !rfb.fbs.isPaused();
+ newTimeOffset = fbs.getSeekOffset();
+ autoPlay = !fbs.isPaused();
} else {
// Return to the beginning after the playback is finished.
- initialTimeOffset = 0;
+ newTimeOffset = 0;
autoPlay = false;
}
- rfb.newSession(url, initialTimeOffset);
+ fbs.close();
+ newFbsConnection();
+ fbs.setTimeOffset(newTimeOffset);
+ rfb.newSession(fbs);
vc.updateFramebufferSize();
} catch (NullPointerException e) {
// catching this causes a hang with 1.4.1 JVM's under Win32 IE
@@ -207,6 +214,17 @@
}
+ /**
+ * Open new connection specified by this.url, save new FbsInputStream in
+ * this.fbs.
+ *
+ * @throws java.io.IOException
+ */
+ void newFbsConnection() throws IOException {
+ URLConnection connection = url.openConnection();
+ fbs = new FbsInputStream(connection.getInputStream());
+ }
+
public void setPausedInt(String paused) {
// default to true (pause)
int pause = 1;
@@ -227,9 +245,9 @@
if (showControls)
buttonPanel.setPaused(paused);
if (paused) {
- rfb.fbs.pausePlayback();
+ fbs.pausePlayback();
} else {
- rfb.fbs.resumePlayback();
+ fbs.resumePlayback();
}
}
@@ -239,27 +257,27 @@
public void setSpeed(double speed) {
playbackSpeed = speed;
- rfb.fbs.setSpeed(speed);
+ fbs.setSpeed(speed);
}
public void jumpTo(long pos) {
- long diff = Math.abs(pos - rfb.fbs.getTimeOffset());
+ long diff = Math.abs(pos - fbs.getTimeOffset());
// Current threshold is 5 seconds
if (diff > 5000) {
- rfb.fbs.pausePlayback();
+ fbs.pausePlayback();
setPos(pos);
- rfb.fbs.resumePlayback();
+ fbs.resumePlayback();
}
}
public void setPos(long pos) {
- rfb.fbs.setTimeOffset(pos);
+ fbs.setTimeOffset(pos);
}
public void updatePos() {
if (showControls && buttonPanel != null)
- buttonPanel.setPos(rfb.fbs.getTimeOffset());
+ buttonPanel.setPos(fbs.getTimeOffset());
}
//
@@ -402,8 +420,12 @@
public void destroy() {
isQuitting = true;
vncContainer.removeAll();
- if (rfb != null) {
- rfb.quit();
+ if (fbs != null) {
+ fbs.quit();
+ try {
+ fbs.close();
+ } catch (IOException e) {
+ }
}
try {
rfbThread.join();