void BasicPacketFlow::Play(BOOL bWouldBlock) { // If this play is not really going to unpause us, becuase the other // pause is still in effect, then do nothing. if ((bWouldBlock && m_bPaused) || (!bWouldBlock && m_ulWouldBlocking)) return; BOOL bInitialPlayReceived = m_bInitialPlayReceived; BOOL bWasPaused = IsPaused(); if (m_bIsMulticast) return; if (m_bInSeek) { m_bPlayPendingOnSeek = TRUE; return; } HX_ASSERT(m_uFirstStreamRegistered != 0xFFFF); if (m_pStreams[m_uFirstStreamRegistered].m_pTransport->isNullSetup()) return; if (m_bAutoSubscription && !m_bSubscribed) { // subscribe to all rules... PacketStream* pStream = 0; for (UINT16 unStreamNum = 0; unStreamNum < m_unStreamCount; unStreamNum++) { pStream = &m_pStreams[unStreamNum]; if (!pStream->m_bStreamRegistered) { continue; } for (INT32 lRuleNumber = 0; lRuleNumber < pStream->m_lNumRules; lRuleNumber++) { HandleSubscribe(lRuleNumber, unStreamNum); } } } HandleTimeLineStateChange(TRUE); m_bInitialSubscriptionDone = TRUE; // It better be done by now! if (!bWouldBlock) { // can we get multiple PLAYs ? if (m_bPaused || !bInitialPlayReceived) { HXTimeval hxt = m_pAccurateClock->GetTimeOfDay(); m_tvRTSPPlayTime.tv_sec = hxt.tv_sec; m_tvRTSPPlayTime.tv_usec = hxt.tv_usec; } m_bPaused = FALSE; } if (bWasPaused) { HandleResume(); } m_pFlowMgr->RecalcConstantBitRate(); if (m_pRateManager) { IHXPacketFlowControl* pRateMgrFlowControl = NULL; if (HXR_OK == m_pRateManager->QueryInterface(IID_IHXPacketFlowControl, (void**)&pRateMgrFlowControl)) { pRateMgrFlowControl->Play(); HX_RELEASE(pRateMgrFlowControl); } } InitialStartup(); if (!m_bInitialPlayReceived) { m_bInitialPlayReceived = TRUE; // Until now, we have not added the bandwidth for this Flow to // the overall total, because we didn't know if the content was // being served from a downstream cache. Now, we know that's not // the case because the RealProxy wouldn't send a play request. m_pFlowMgr->CommitPendingBandwidth(); // Tell the bandwidth calculators to commit their bandwidth as well for (UINT16 n = 0; n < m_unStreamCount; n++) { if (m_pStreams[n].m_bStreamRegistered) { m_pStreams[n].CommitPendingBandwidth(); } } } return; }
bool DisplayTimer::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg) { static CParsedMsg::CToken s_cTok_Start("START"); static CParsedMsg::CToken s_cTok_On("ON"); static CParsedMsg::CToken s_cTok_Add("ADD"); static CParsedMsg::CToken s_cTok_End("END"); static CParsedMsg::CToken s_cTok_Off("OFF"); static CParsedMsg::CToken s_cTok_Kill("KILL"); static CParsedMsg::CToken s_cTok_Pause("PAUSE"); static CParsedMsg::CToken s_cTok_Resume("RESUME"); static CParsedMsg::CToken s_cTok_Team("TEAM"); if ((cMsg.GetArg(0) == s_cTok_Start) || (cMsg.GetArg(0) == s_cTok_On)) { if (cMsg.GetArgCount() > 1) { HandleStart((LTFLOAT)atof(cMsg.GetArg(1))); } } else if (cMsg.GetArg(0) == s_cTok_Add) { if (cMsg.GetArgCount() > 1) { HandleAdd((LTFLOAT)atof(cMsg.GetArg(1))); } } else if ((cMsg.GetArg(0) == s_cTok_End) || (cMsg.GetArg(0) == s_cTok_Off)) { HandleEnd(); } else if (cMsg.GetArg(0) == s_cTok_Kill) { HandleAbort(); } else if (cMsg.GetArg(0) == s_cTok_Pause) { HandlePause(); } else if (cMsg.GetArg(0) == s_cTok_Resume) { HandleResume(); } else if (cMsg.GetArg(0) == s_cTok_Team) { if( cMsg.GetArgCount( ) > 1 ) { uint32 nTeamId = atoi( cMsg.GetArg( 1 )); if( nTeamId < MAX_TEAMS ) { m_nTeamId = nTeamId; } else { m_nTeamId = INVALID_TEAM; } UpdateClients( ); } } else return GameBase::OnTrigger(hSender, cMsg); return true; }