]> source.dussan.org Git - tigervnc.git/commitdiff
[Development] Added two methods to open FBS files, with and without index-driven...
authorConstantin Kaplinsky <const@tightvnc.com>
Fri, 20 Jun 2008 18:50:27 +0000 (18:50 +0000)
committerConstantin Kaplinsky <const@tightvnc.com>
Fri, 20 Jun 2008 18:50:27 +0000 (18:50 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@2608 3789f03b-4d11-0410-bbf8-ca57d06f2519

java/src/com/tightvnc/rfbplayer/FbsConnection.java

index 23b0765942a791c77aa6d842f47f32aa719a4f70..f53e5557c430b00cb4cc7dadb3b4a5564dc9f5dd 100644 (file)
@@ -63,6 +63,8 @@ public class FbsConnection {
   }
 
   FbsInputStream connect(long timeOffset) throws IOException {
+    FbsInputStream fbs = null;
+
     // Try efficient seeking first.
     if (timeOffset > 0 && indexData != null && numIndexRecords > 0) {
       int i = 0;
@@ -72,21 +74,31 @@ public class FbsConnection {
       if (i > 0) {
         FbsEntryPoint entryPoint = indexData[i - 1];
         if (entryPoint.key_size < entryPoint.fbs_fpos) {
-          System.err.println(entryPoint);
+          try {
+            fbs = openFbsFile(entryPoint);
+          } catch (IOException e) {
+            System.err.println(e);
+          }
+          if (fbs == null) {
+            System.err.println("Could not open FBS file at entry point " +
+                               entryPoint.timestamp + " ms");
+          }
         }
       }
     }
 
-    // Playback/seek from the beginning.
-    URLConnection connection = fbsURL.openConnection();
-    FbsInputStream fbs = new FbsInputStream(connection.getInputStream());
-    fbs.setTimeOffset(timeOffset);
+    // Fallback to the dumb version of openFbsFile().
+    if (fbs == null) {
+      fbs = openFbsFile();
+    }
 
+    // Seek to the specified position.
+    fbs.setTimeOffset(timeOffset);
     return fbs;
   }
 
   /**
-   * Load index data from .fbi file to {@link #indexData indexData}.
+   * Load index data from .fbi file to {@link #indexData}.
    */
   private void loadIndex() {
     // Loading .fbi makes sense only if both .fbi and .fbk files are available.
@@ -156,4 +168,30 @@ public class FbsConnection {
     }
   }
 
+  /**
+   * Open FBS file identified by {@link #fbsURL}. The file is open at its very
+   * beginning, no seek is performed.
+   *
+   * @return a newly created FBS input stream.
+   * @throws java.io.IOException if an I/O exception occurs.
+   */
+  private FbsInputStream openFbsFile() throws IOException {
+    return new FbsInputStream(fbsURL.openStream());
+  }
+
+  /**
+   * Open FBS file identified by {@link #fbsURL}. The stream is
+   * positioned at the entry point described by <code>entryPoint</code>.
+   *
+   * @param entryPoint entry point information.
+   *
+   * @return a newly created FBS input stream on success, <code>null</code> if
+   *   any error occured and the FBS stream is not opened.
+   * @throws java.io.IOException if an I/O exception occurs.
+   */
+  private FbsInputStream openFbsFile(FbsEntryPoint entryPoint)
+      throws IOException {
+    return null;
+  }
+
 }