chxavcallback.cpp
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:3k
源码类别:

Symbian

开发平台:

Visual C++

  1. /************************************************************************
  2.  * chxavcallback.cpp
  3.  * -----------------
  4.  *
  5.  * Synopsis:
  6.  * Encapsulates single or periodic timer callback
  7.  *
  8.  *
  9.  * (c) 1995-2003 RealNetworks, Inc. Patents pending. All rights reserved.
  10.  *
  11.  ************************************************************************/
  12. // Symbian includes...
  13. #include "hxtypes.h"
  14. #include "hxassert.h"
  15. // Includes from this project...
  16. #include "chxavmisc.h"
  17. #include "chxavutil.h"
  18. #include "chxavcallback.h"
  19. #include "chxavcommand.h"
  20. #include "hxsym_leaveutil.h"
  21. ////////////////////////////////////////////
  22. //
  23. CHXAvCallback::CHXAvCallback()
  24. : m_pAction(0)
  25. , m_cbType(ONCE)
  26. , m_msTimeout(0)
  27. {
  28. }
  29. ////////////////////////////////////////////
  30. //
  31. CHXAvCallback::~CHXAvCallback()
  32. {
  33.     Stop();
  34.     m_timer.Close();
  35.     HX_DELETE(m_pAction);
  36. }
  37. ////////////////////////////////////////////
  38. //
  39. void CHXAvCallback::ConstructL(const CHXAvCommand& cmd)
  40. {
  41.     m_pAction = cmd.CloneL();
  42.     HXSYM_LEAVE_IF_ERR(m_timer.CreateLocal());
  43.     // active object to run on timer event
  44.     m_pActiveObject = 
  45. new (ELeave) CHXAvActiveDisp<CHXAvCallback>(this, 
  46.     &CHXAvCallback::OnTimerEvent,
  47.     &CHXAvCallback::OnTimerEventCancel);
  48.     CActiveScheduler::Add(m_pActiveObject.raw_ptr());
  49. }
  50. ////////////////////////////////////////////
  51. // abort callback if it is pending
  52. //
  53. void CHXAvCallback::Stop()
  54. {
  55.     if( m_pActiveObject && m_pActiveObject->IsActive() )
  56.     {
  57. m_pActiveObject->Cancel();
  58.     }
  59. }
  60. ////////////////////////////////////////////
  61. // issue timer event request
  62. //
  63. // can be called at any time to extend or
  64. // reset the timeout
  65. //
  66. void CHXAvCallback::Set(TUint msTimeout, CallbackType cbType)
  67. {
  68.     m_cbType = cbType;
  69.     m_msTimeout = msTimeout;
  70.     // cancel existing request if it exists;
  71.     Stop();
  72.     m_timer.After(m_pActiveObject->Status(), m_msTimeout * 1000);
  73.     m_pActiveObject->Activate();
  74. }
  75. ////////////////////////////////////////////
  76. // AO notification
  77. void CHXAvCallback::OnTimerEvent(TInt status)
  78. {
  79.     //DPRINTF(D_GUI_VERBOSE, ("OnTimerEvent(%d)'n", status));
  80.     if(status == KErrNone)
  81.     {
  82. m_pAction->Execute();
  83.         HX_ASSERT(m_pAction != 0); // self-delete?
  84.         if(REPEAT == m_cbType)
  85.         {
  86.     Set(m_msTimeout, REPEAT);
  87.         }
  88.     }
  89.     
  90. }
  91. ////////////////////////////////////////////
  92. // AO notification
  93. void CHXAvCallback::OnTimerEventCancel(TInt status)
  94. {
  95.     m_timer.Cancel();
  96. }