Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3472647
  • 博文数量: 1450
  • 博客积分: 11163
  • 博客等级: 上将
  • 技术积分: 11101
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-25 14:40
文章分类

全部博文(1450)

文章存档

2017年(5)

2014年(2)

2013年(3)

2012年(35)

2011年(39)

2010年(88)

2009年(395)

2008年(382)

2007年(241)

2006年(246)

2005年(14)

分类: C/C++

2009-08-05 10:17:17

#include "AlarmListener.h"
#include


_LIT(KAlarmMessage,"\nMY Alarm.");
CAlarmListener* CAlarmListener::NewLC( MAlarmObserver& aObserver )
{
        CAlarmListener* self = new (ELeave) CAlarmListener(aObserver);
        CleanupStack::PushL(self);
        self->ConstructL();
        return self;
}
CAlarmListener* CAlarmListener::NewL( MAlarmObserver& aObserver )
{
        CAlarmListener* self = CAlarmListener::NewLC(aObserver);
        CleanupStack::Pop(self);
        return self;
}

CAlarmListener::CAlarmListener( MAlarmObserver& aObserver ) : CActive(EPriorityStandard)        // Standard priority
                                                                                                                        , iObserver(aObserver)
{
}

void CAlarmListener::ConstructL()
{
        User::LeaveIfError(iAlarmServerSession.Connect());
        CActiveScheduler::Add(this);                                // Add to scheduler

}

CAlarmListener::~CAlarmListener()
{
        Cancel();
        iAlarmServerSession.Close();
}

void CAlarmListener::DoCancel()
{
        iAlarmServerSession.NotifyChangeCancel();
}

void CAlarmListener::StartL()
{
        Cancel();        // Cancel any request, just to be sure        
        iAlarmServerSession.NotifyChange(this->iStatus,iAlarmId);
        SetActive();                                        // Tell scheduler a request is active
}

void CAlarmListener::RunL()
{

        TAlarmChangeEvent  alarmChangeEvent = static_cast(iStatus.Int());
        switch (alarmChangeEvent)
        {
        case EAlarmChangeEventTimerExpired:
                {
                        TASShdAlarm alarmplaying;
                        iAlarmServerSession.GetAlarmDetails(iAlarmId,alarmplaying);


                        if(alarmplaying.Message().CompareF(KAlarmMessage) == 0)
                        {
                                TInt dState; 
                                
        
                                TTime duetime = alarmplaying.NextDueTime();
                                TTime hometime;
                                hometime.HomeTime();
                                if(hometime < duetime)
                                {
                                        iAlarmServerSession.NotifyChange(this->iStatus,iAlarmId);
                                        SetActive();        
                                        return;
                                }

                                if(alarmplaying.RepeatDefinition() == EAlarmRepeatDefintionRepeatOnce)
                                {
                                        
                                        User::LeaveIfError(iAlarmServerSession.AlarmDelete(iAlarmId));
                                        iObserver.ResponseTimerExpiredL(EMyAlarmOnce);
                                        
                                }
                                else if(alarmplaying.RepeatDefinition() == EAlarmRepeatDefintionRepeatDaily)
                                {
                                        User::LeaveIfError(iAlarmServerSession.AlarmDelete(iAlarmId));
                                        iObserver.ResponseTimerExpiredL(EMyAlarmRepeat);

                                        TASShdAlarm alarm;
                                        alarm.Category() = KASCliCategoryClock;
                                        alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatDaily;
                                        alarm.Message() = KAlarmMessage;
                                        TTime temptime = alarmplaying.NextDueTime();
                                        temptime += TTimeIntervalDays(1);
                                        alarm.NextDueTime() = temptime;
                                        User::LeaveIfError(iAlarmServerSession.AlarmAdd(alarm));
                                }
                        }
        
                        break;
                }
        default:
                break;

        }
        iAlarmServerSession.NotifyChange(this->iStatus,iAlarmId);
        SetActive();                                        // Tell scheduler a request is active
}

阅读(641) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~