From 23e0856c6731a1a0791f8122901493e189332291 Mon Sep 17 00:00:00 2001 From: george82 Date: Mon, 31 Jan 2005 15:16:42 +0000 Subject: [PATCH] Added RfbPlayer::processMsg(). 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 | 37 ++++++++++++++++++++++++++++++++++++- rfbplayer/rfbplayer.h | 1 + 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/rfbplayer/rfbplayer.cxx b/rfbplayer/rfbplayer.cxx index 41f36ca2..627de145 100644 --- a/rfbplayer/rfbplayer.cxx +++ b/rfbplayer/rfbplayer.cxx @@ -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() { diff --git a/rfbplayer/rfbplayer.h b/rfbplayer/rfbplayer.h index 062c7153..e40265ec 100644 --- a/rfbplayer/rfbplayer.h +++ b/rfbplayer/rfbplayer.h @@ -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); -- 2.39.5