chxavplayerstatedispatch.cpp
来自「著名的 helix realplayer 基于手机 symbian 系统的 播放」· C++ 代码 · 共 216 行
CPP
216 行
/************************************************************************
* chxavplayerstatedispatch.cpp
* ----------------------------
*
* Synopsis:
* Contains the implementation of the CHXAvPlayerStateDispatch class.
* This class calls any play state observer with state changes.
*
* Target:
* Symbian OS
*
*
* (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
*
*****************************************************************************/
#include "hxstring.h"
#include "ihxsymplayerstateobserver.h"
#include "chxavplayerstatedispatch.h"
namespace
{
//
// ugly stuff to make fowarding methods
// prettier (plus share some code)
//
void Notify0(CHXSimpleList& list,
void (IHXSymPlayerStateObserver::* pmfn)())
{
for ( CHXSimpleList::Iterator iter = list.Begin(); iter != list.End(); ++iter )
{
IHXSymPlayerStateObserver* pObserver = static_cast<IHXSymPlayerStateObserver*>(*iter);
(pObserver->*pmfn)();
}
}
template<typename ArgType1>
void Notify1(CHXSimpleList& list,
void (IHXSymPlayerStateObserver::* pmfn)(ArgType1),
ArgType1 arg1)
{
for ( CHXSimpleList::Iterator iter = list.Begin(); iter != list.End(); ++iter )
{
IHXSymPlayerStateObserver* pObserver = static_cast<IHXSymPlayerStateObserver*>(*iter);
(pObserver->*pmfn)(arg1);
}
}
template<typename ArgType1, typename ArgType2>
void Notify2(CHXSimpleList& list,
void (IHXSymPlayerStateObserver::* pmfn)(ArgType1,ArgType2),
ArgType1 arg1, ArgType2 arg2)
{
for ( CHXSimpleList::Iterator iter = list.Begin(); iter != list.End(); ++iter )
{
IHXSymPlayerStateObserver* pObserver = static_cast<IHXSymPlayerStateObserver*>(*iter);
(pObserver->*pmfn)(arg1,arg2);
}
}
} // local namespace
/*
* CHXAvPlayerStateDispatch
* ------------------------
* Ctor.
*
*/
CHXAvPlayerStateDispatch::CHXAvPlayerStateDispatch()
{
}
/*
* ~CHXAvPlayerStateDispatch
* -------------------------
* Dtor. Make sure list is empty.
*
*/
CHXAvPlayerStateDispatch::~CHXAvPlayerStateDispatch()
{
HX_ASSERT(m_observers.IsEmpty());
}
void CHXAvPlayerStateDispatch::OnPlayInitiate(const char* url)
{
Notify1(m_observers, &IHXSymPlayerStateObserver::OnPlayInitiate, url);
}
void CHXAvPlayerStateDispatch::OnNetConnect()
{
Notify0(m_observers, &IHXSymPlayerStateObserver::OnNetConnect);
}
void
CHXAvPlayerStateDispatch::OnLoadSession(IHXRequest* request)
{
Notify1(m_observers, &IHXSymPlayerStateObserver::OnLoadSession, request);
}
void
CHXAvPlayerStateDispatch::OnError(HX_RESULT code)
{
Notify1(m_observers, &IHXSymPlayerStateObserver::OnError, code);
}
void
CHXAvPlayerStateDispatch::OnAdvancePlaylist()
{
Notify0(m_observers, &IHXSymPlayerStateObserver::OnAdvancePlaylist);
}
void
CHXAvPlayerStateDispatch::OnResume()
{
Notify0(m_observers, &IHXSymPlayerStateObserver::OnResume);
}
void
CHXAvPlayerStateDispatch::OnStop()
{
Notify0(m_observers, &IHXSymPlayerStateObserver::OnStop);
}
void
CHXAvPlayerStateDispatch::OnPause()
{
Notify0(m_observers, &IHXSymPlayerStateObserver::OnPause);
}
void
CHXAvPlayerStateDispatch::OnBeginBuffering(bool bIsBegin)
{
Notify1(m_observers, &IHXSymPlayerStateObserver::OnBeginBuffering, bIsBegin);
}
void
CHXAvPlayerStateDispatch::OnBuffering(UINT16 percent)
{
Notify1(m_observers, &IHXSymPlayerStateObserver::OnBuffering, percent);
}
void
CHXAvPlayerStateDispatch::OnBeginSeek()
{
Notify0(m_observers, &IHXSymPlayerStateObserver::OnBeginSeek);
}
void
CHXAvPlayerStateDispatch::OnVolume(unsigned int percentVol)
{
Notify1(m_observers, &IHXSymPlayerStateObserver::OnVolume, percentVol);
}
void
CHXAvPlayerStateDispatch::OnMute(bool bMute)
{
Notify1(m_observers, &IHXSymPlayerStateObserver::OnMute, bMute);
}
void
CHXAvPlayerStateDispatch::OnNewPos(ULONG32 msNewTime)
{
Notify1(m_observers, &IHXSymPlayerStateObserver::OnNewPos, msNewTime);
}
/*
* AddObserver
* -----------
* Add an observer
*
*/
void CHXAvPlayerStateDispatch::AddObserver(IHXSymPlayerStateObserver* pObserver)
{
// Make sure this observer is not already in the list...
if (0 == m_observers.Find((void *)pObserver, NULL))
{
m_observers.AddTail((void *)pObserver);
}
}
/*
* RemoveObserver
* --------------
* Remove an observer
*
*/
void CHXAvPlayerStateDispatch::RemoveObserver(IHXSymPlayerStateObserver* pObserver)
{
LISTPOSITION position = m_observers.Find((void *)pObserver, NULL);
if (position != NULL)
{
m_observers.RemoveAt(position);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?