⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 countdownrec.cpp

📁 《基于symbian手机开发与应用》一书的源代码
💻 CPP
字号:
// CountDownRec.CPP
//
//
#include "CountDownDB.h"

#include <apmrec.h>
#include <apmstd.h>
#include <e32math.h>
#include <f32file.h>
#include <eikenv.h>

#include <aknglobalnote.h> 

const TUint KCountDownServMajorVersionNumber=0;
const TUint KCountDownServMinorVersionNumber=1;
const TUint KCountDownServBuildVersionNumber=1;

_LIT(KCountDownServerName,"CountDownServer");
_LIT(KCountDownServerSemaphoreName, "CountDownServerSemaphore");
_LIT(KCountDownServerFilename, "CountDownSrv");
_LIT(KCountDownRunSemaphore, "CountDownRunSemaphore");

class CTimerOut : public CTimer
{
public:
	CTimerOut();
	~CTimerOut();

	void StartTimer();

public:
	void DoCancel();
	void RunL();
};

void ShowNotify(TDesC &aBuf)
{
    TRequestStatus status;
    CAknGlobalNote* globalNote = CAknGlobalNote::NewLC();
    globalNote->ShowNoteL(status, EAknGlobalInformationNote, aBuf );
    User::WaitForRequest(status);
    CleanupStack::PopAndDestroy();
}

CTimerOut::CTimerOut()
:  CTimer( EActivePriorityClockTimer )
{
    CTimer::ConstructL();
    CActiveScheduler::Add( this );
}

CTimerOut::~CTimerOut()
{
	CTimer::DoCancel();
}

void CTimerOut::StartTimer()
{
	After(12000000);
}

void CTimerOut::DoCancel()
{
}

void CTimerOut::RunL()
{
    CCountDownDB *iDB = NULL;
	iDB = new(ELeave) CCountDownDB();
    void *rscBuf = iDB->ReadRscL();
    if(rscBuf)
    {
        TInt32 *p32 = (TInt32 *)rscBuf;
        TInt32 rscCount = *p32;
        TInt32 len1, len2, len3;
        TName rscInfo1,rscInfo2,rscInfo3;
        TInt i;
        if(rscCount==3)
        {
            p32 ++;
            len1 = *p32;
            p32 ++;
            len2 = *p32;
            p32 ++;
            len3 = *p32;
            p32 ++;

            TPtr16 ptr16((TUint16 *)p32, len1+len2+len3, len1+len2+len3);

            rscInfo1.Copy(ptr16.Left(len1));
            ptr16.Delete(0, len1);
            rscInfo2.Copy(ptr16.Left(len2));
            ptr16.Delete(0, len2);
            rscInfo3.Copy(ptr16.Left(len3));
        }
        User::Free(rscBuf);
        for(i=0;i<iDB->iArrayDB->Count();i++)
        {
            TRecordDBStruct &db = iDB->iArrayDB->At(i);
            TTime time(db.iTime);
            TTime curTime;
            curTime.HomeTime();
            TInt days = GetDays(time, curTime);
            TName tips;
            if(days>0)
            {
                tips.Format(rscInfo1, &db.iName, days);
            }
            else
            {
                if(days==0)
                {
                    tips.Format(rscInfo2, &db.iName);
                }
                else
                {
                    tips.Format(rscInfo3, &db.iName, -days);
                }
                //delete
                iDB->iArrayDB->Delete(i);
                iDB->SaveDBL();
                i --;
            }
            ShowNotify(tips);
        }
    }
    delete iDB;
}

const TInt KMimeCountDownRecognizerValue=0x025DD340;
const TUid KUidMimeCountDownRecognizer={KMimeCountDownRecognizerValue};

class CApaCountDownRecognizer : public CApaDataRecognizerType // (declared in \emime\inc\APMREC.H)
{
public: // from CApaDataRecognizerType
	CApaCountDownRecognizer();
	static CApaCountDownRecognizer* CApaCountDownRecognizer::NewL();
	TDataType SupportedDataTypeL(TInt aIndex) const;
	TUint PreferredBufSize();
private:
	void Construct();
	void DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer);
	CTimerOut iTimer;
};

CApaCountDownRecognizer::CApaCountDownRecognizer()
:CApaDataRecognizerType(KUidMimeCountDownRecognizer,CApaDataRecognizerType::ENormal)
{
}

TUint CApaCountDownRecognizer::PreferredBufSize()
{
	return 3;
}

TDataType CApaCountDownRecognizer::SupportedDataTypeL(TInt /*aIndex*/) const
{
	return iDataType;
}

void CApaCountDownRecognizer::DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer)
{
}

void CApaCountDownRecognizer::Construct()
{
	iCountDataTypes=1;
	iTimer.StartTimer();
}

CApaCountDownRecognizer* CApaCountDownRecognizer::NewL()
{
	CApaCountDownRecognizer* self=new (ELeave) CApaCountDownRecognizer();   
	self->Construct(); 
	return self;
}

EXPORT_C CApaDataRecognizerType* CreateRecognizer()
// The gate function - ordinal 1
//
{
	CApaDataRecognizerType* thing=NULL;
	TRAPD(err, thing=CApaCountDownRecognizer::NewL());
	return thing; // NULL if new failed
}

GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
//
// DLL entry point
//
{
	return KErrNone;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -