diff -r a36b1e19a461 -r 989d2f495d90 serviceproviders/sapi_messaging/tsrc/dev/tmessagingprovidertest/manual/tmsg_notificationiter3/src/notify.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceproviders/sapi_messaging/tsrc/dev/tmessagingprovidertest/manual/tmsg_notificationiter3/src/notify.cpp Fri Jul 03 15:51:24 2009 +0100 @@ -0,0 +1,249 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include "messaginginterface.h" +#include +#include +#include + +#include"notify.h" + +_LIT8(KTestInterface, "IMessaging"); +_LIT8(KTestContent, "Service.Messaging"); +_LIT8(KCmd, "RegisterNotification"); +_LIT8(KCmdCancel, "CancelNotification"); +_LIT8(KMessageId, "MessageId"); +_LIT8(KMap, "Type"); +_LIT8(KMessageList, "MessageList" ); +_LIT8(KMessage, "Message" ); + +_LIT(KMsgType,"NewMessage"); + + + +CMsgCallback* CMsgCallback::NewL(CActiveSchedulerWait* aWaitSchedular, MLiwInterface* aInterface) + { + return new (ELeave) CMsgCallback(aWaitSchedular, aInterface); + } + +TInt CMsgCallback::HandleNotifyL(TInt aCmdId, + TInt aEventId, + CLiwGenericParamList& aEventParamList, + const CLiwGenericParamList& aInParamList) + { + TInt pos = 0; + TInt result = KErrNone; + const TLiwGenericParam* output = aEventParamList.FindFirst( pos,_L8("ReturnValue")); + + const CLiwMap* header = output->Value().AsMap(); + TInt32 newmessageid = -1; + if ( header ) + { + TLiwVariant mesageid; + if( header->FindL(KMessageId, mesageid)) + { + newmessageid = mesageid.AsTInt32(); + } + mesageid.Reset(); + } + + if ( newmessageid ) + { + + CLiwGenericParamList* inParamList = CLiwGenericParamList::NewL(); + CLiwGenericParamList* outParamList = CLiwGenericParamList::NewL(); + + TLiwVariant content(_L8("Inbox")); + TLiwGenericParam elem ; + elem.SetNameAndValueL(_L8("Type"),content); + inParamList->AppendL(elem); + content.Reset(); + elem.Reset(); + + CLiwDefaultMap* filtermap = CLiwDefaultMap::NewL(); + CleanupStack::PushL(filtermap); + + TLiwVariant filterid( newmessageid ); + filtermap->InsertL(KMessageId, filterid); // Mtmtype is added + filterid.Reset(); + + + TLiwVariant filterparam(filtermap); + TLiwGenericParam element ; + element.SetNameAndValueL(_L8("Filter"),filterparam); + filterparam.Reset(); + + inParamList->AppendL(element); + element.Reset(); + + filtermap->DecRef(); + CleanupStack::Pop(filtermap); + + + TInt err = 0; + TRAP(err,iInterface->ExecuteCmdL( _L8("GetList") ,*inParamList ,*outParamList)); + + pos = 0 ; + + const TLiwGenericParam* finaloutput = outParamList->FindFirst( pos,_L8("ReturnValue")); + + if ( finaloutput ) + { + CLiwIterable* iterlist = finaloutput->Value().AsIterable(); + + if(iterlist) + { + TLiwVariant data; + + if ( iterlist->NextL(data) ) + result = KErrNone; + + data.Reset(); + + } + } + + inParamList->Reset(); + outParamList->Reset(); + + delete inParamList; + delete outParamList; + + } + + if ( iWaitSchedular && iWaitSchedular->IsStarted()) + { + iWaitSchedular->AsyncStop(); + } + } + + + +CTestAsync* CTestAsync::NewL() + { + CTestAsync* self = new (ELeave) CTestAsync(); + self->ConstructL(); + return self; + } + +CTestAsync::~CTestAsync() + { + Cancel(); + + interface->Close(); + + delete iServiceHandler; + + delete iCallback; + + if(iWaitSchedular->IsStarted()) + iWaitSchedular->AsyncStop(); + + delete iWaitSchedular; + } + + +void CTestAsync::ConstructL() + { + CActiveScheduler::Add(this); + iWaitSchedular = new(ELeave) CActiveSchedulerWait(); + } + + +CTestAsync::CTestAsync() : +CActive(EPriorityStandard) + { + interface = NULL ; + } + +void CTestAsync::DoCancel() + { + + } + +void CTestAsync::RunL() + { + TestFunc(); + } + + +void CTestAsync::Start() + { + SetActive(); + TRequestStatus* temp = &iStatus; + User::RequestComplete(temp, KErrNone); + iWaitSchedular->Start(); + } + + +void CTestAsync::TestFunc() + { + iServiceHandler = CLiwServiceHandler::NewL(); + + CLiwGenericParamList* inparam = &(iServiceHandler->InParamListL()); + CLiwGenericParamList* outparam = &(iServiceHandler->OutParamListL()); + + + TInt err; + + CLiwCriteriaItem* crit = CLiwCriteriaItem::NewL(1, KTestInterface,KTestContent); + crit->SetServiceClass(TUid::Uid(KLiwClassBase)); + + RCriteriaArray a; + a.AppendL(crit); + + iServiceHandler->AttachL(a); + iServiceHandler->ExecuteServiceCmdL(*crit, *inparam, *outparam); + + a.Reset(); + delete crit; + + TInt pos = 0; + + outparam->FindFirst( pos, KTestInterface ); + if(pos != KErrNotFound) + { + interface = (*outparam)[pos].Value().AsInterface(); + } + + outparam->Reset(); + inparam->Reset(); + + TLiwGenericParam element ; + element.SetNameAndValueL(KMap, TLiwVariant(KMsgType)); + inparam->AppendL(element); + element.Reset(); + + iCallback = CMsgCallback::NewL(iWaitSchedular, interface); + + TRAPD(err1 ,interface->ExecuteCmdL(KCmd, *inparam, *outparam, KLiwOptASyncronous, iCallback)); + inparam->Reset(); + outparam->Reset(); + } + + +int ReqNotification(int, char**) + { + __UHEAP_MARK; + CTestAsync* test = CTestAsync::NewL(); + test->Start(); + delete test; + __UHEAP_MARKEND; + return 0; + + } \ No newline at end of file