]> source.dussan.org Git - tigervnc.git/commitdiff
Added RfbPlayer::processMsg().
authorgeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Mon, 31 Jan 2005 15:16:42 +0000 (15:16 +0000)
committergeorge82 <george82@3789f03b-4d11-0410-bbf8-ca57d06f2519>
Mon, 31 Jan 2005 15:16:42 +0000 (15:16 +0000)
It is used for processing the rfb protocol messages.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@135 3789f03b-4d11-0410-bbf8-ca57d06f2519

rfbplayer/rfbplayer.cxx
rfbplayer/rfbplayer.h

index 41f36ca29d684f6b78b23c8858dfb5c45e6e0fb4..627de14589b7ee0ca0fd82ec59d6ee7e32fb0e01 100644 (file)
@@ -288,8 +288,8 @@ RfbPlayer::processMainMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
       break;
     case ID_STOP:
       if (getTimeOffset() != 0) {
-        setPaused(true);
         setPos(0);
+        setPaused(true);
       }
       tb.checkButton(ID_STOP, true);
       tb.checkButton(ID_PLAY, false);
@@ -688,9 +688,43 @@ void RfbPlayer::blankBuffer() {
 }
 
 void RfbPlayer::rewind() {
+  bool paused = isPaused();
   blankBuffer();
   newSession(fileName);
   skipHandshaking();
+  setSpeed(playbackSpeed);
+  setPaused(paused);
+}
+
+void RfbPlayer::processMsg() {
+  static long update_time = GetTickCount();
+  try {
+    if ((!isSeeking()) && ((GetTickCount() - update_time) > 250)) {
+      // Update pos in the toolbar 4 times in 1 second
+      updatePos();
+      update_time = GetTickCount();
+    }
+    RfbProto::processMsg();
+  } catch (rdr::Exception e) {
+    if (strcmp(e.str(), "[End Of File]") == 0) {
+      rewind();
+      setPaused(true);
+      tb.checkButton(ID_STOP, true);
+      tb.checkButton(ID_PAUSE, false);
+      tb.checkButton(ID_PLAY, false);
+      return;
+    }
+    // It's a special exception to perform backward seeking.
+    // We only rewind the stream and seek the offset
+    if (strcmp(e.str(), "[REWIND]") == 0) {
+      long initTime = getSeekOffset();
+      rewind();
+      setPos(initTime);
+    } else {
+      MessageBox(getMainHandle(), e.str(), e.type(), MB_OK | MB_ICONERROR);
+      return;
+    }
+  }
 }
 
 void RfbPlayer::serverInit() {
@@ -787,6 +821,7 @@ void RfbPlayer::setPaused(bool paused) {
 void RfbPlayer::setSpeed(double speed) {
   serverInitTime = serverInitTime * getSpeed() / speed;
   is->setSpeed(speed);
+  playbackSpeed = speed;
 }
 
 double RfbPlayer::getSpeed() {
index 062c715380f709a8c3aeb441d43c075d9b585cbe..e40265ec340cb2600038ad0687bbea9cc8a6d2f4 100644 (file)
@@ -90,6 +90,7 @@ class RfbPlayer : public RfbProto {
 
     // -=- RfbProto interface overrides
 
+    virtual void processMsg();
     virtual void serverInit();
     virtual void frameBufferUpdateEnd();
     virtual void setColourMapEntries(int first, int count, U16* rgbs);