uiacceltk/hitchcock/AlfDecoderServerClient/src/alfcompositionclient.cpp
branchRCL_3
changeset 11 46927d61fef3
parent 10 88b23e2e82e1
child 17 3ac8bf5c5014
equal deleted inserted replaced
10:88b23e2e82e1 11:46927d61fef3
  1229         }
  1229         }
  1230     // call base class
  1230     // call base class
  1231     CAlfCompositionSource::HandleEventL( aEventType, aEventData );
  1231     CAlfCompositionSource::HandleEventL( aEventType, aEventData );
  1232     }
  1232     }
  1233 
  1233 
       
  1234 class CAlfSignalObserver;
       
  1235 
       
  1236 class MAlfEffectObserverData
       
  1237     {
       
  1238     public:
       
  1239         virtual void Remove(CAlfSignalObserver* aObserver) = 0;
       
  1240     };
       
  1241 
       
  1242 NONSHARABLE_CLASS(CAlfEffectObserver::CAlfEffectObserverData): public CBase, public MAlfEffectObserverData
       
  1243     {
       
  1244     public:
       
  1245     void SubscribeCallbackL(MAlfEffectObserver* aObserver, TInt aHandle, TInt aType = MAlfEffectObserver::EAlfEffectComplete );        
       
  1246     ~CAlfEffectObserverData();
       
  1247     void Remove(CAlfSignalObserver* aObserver);
       
  1248     
       
  1249     // data
       
  1250     RAlfBridgerClient iClient;
       
  1251     RPointerArray<CAlfSignalObserver> iObservers;
       
  1252     };
       
  1253 
       
  1254 
       
  1255 NONSHARABLE_CLASS(CAlfSignalObserver):public CActive
       
  1256     {
       
  1257     public:    
       
  1258     CAlfSignalObserver(CAlfEffectObserver::MAlfEffectObserver* aObserver, MAlfEffectObserverData* aOwner, TInt aHandle, TInt aType):CActive(EPriorityStandard),
       
  1259         iOwner(aOwner), iObserver(aObserver), iHandle(aHandle), iType(aType), iArgs(aHandle,aType)
       
  1260         {   
       
  1261         CActiveScheduler::Add(this);
       
  1262         SetActive(); 
       
  1263         }
       
  1264                 
       
  1265     void DoCancel(){} // do not...
       
  1266     
       
  1267     void RunL()
       
  1268         {    
       
  1269         iObserver->HandleEffectCallback(iType, iHandle, iStatus.Int());
       
  1270         iOwner->Remove(this);
       
  1271         }    
       
  1272     
       
  1273     MAlfEffectObserverData* iOwner;
       
  1274     CAlfEffectObserver::MAlfEffectObserver* iObserver;
       
  1275     TInt iHandle;        
       
  1276     TInt iType;
       
  1277     TIpcArgs iArgs;
       
  1278     };
       
  1279 
       
  1280 void CAlfEffectObserver::CAlfEffectObserverData::SubscribeCallbackL(MAlfEffectObserver* aObserver, TInt aHandle, TInt aType)
       
  1281     {
       
  1282     CAlfSignalObserver* obs = new (ELeave) CAlfSignalObserver(aObserver, this, aHandle, aType);
       
  1283     CleanupStack::PushL(obs);
       
  1284     User::LeaveIfError(iObservers.Append(obs));
       
  1285     CleanupStack::Pop();
       
  1286     iClient.SendAsynchronous(EAlfRequestSignal, obs->iArgs, obs->iStatus);        
       
  1287     }
       
  1288         
       
  1289 CAlfEffectObserver::CAlfEffectObserverData::~CAlfEffectObserverData()
       
  1290     {    
       
  1291     iClient.Close(); // destroys signals
       
  1292     iObservers.ResetAndDestroy();
       
  1293     }
       
  1294         
       
  1295 void CAlfEffectObserver::CAlfEffectObserverData::Remove(CAlfSignalObserver* aObserver)
       
  1296     {
       
  1297     TInt index = iObservers.Find(aObserver);
       
  1298     iObservers.Remove(index);
       
  1299     delete aObserver;   
       
  1300     }    
       
  1301     
       
  1302 EXPORT_C CAlfEffectObserver* CAlfEffectObserver::NewL()
       
  1303     {
       
  1304     CAlfEffectObserver* me = new (ELeave) CAlfEffectObserver();
       
  1305     CleanupStack::PushL(me);
       
  1306     me->iData = new (ELeave) CAlfEffectObserverData();
       
  1307     User::LeaveIfError(me->iData->iClient.Connect());
       
  1308     CleanupStack::Pop();
       
  1309     return me;    
       
  1310     }
       
  1311 
       
  1312 EXPORT_C CAlfEffectObserver::~CAlfEffectObserver()
       
  1313     {
       
  1314     delete iData;        
       
  1315     }
       
  1316 
       
  1317 EXPORT_C TInt CAlfEffectObserver::ActiveEffectsCount()
       
  1318     {
       
  1319     return iData->iClient.EffectsCount();
       
  1320     }
       
  1321 
       
  1322 EXPORT_C void CAlfEffectObserver::SubscribeCallbackL(MAlfEffectObserver* aObserver, TInt aHandle, TInt aType)
       
  1323     {
       
  1324     iData->SubscribeCallbackL(aObserver, aHandle, aType ); 
       
  1325     }
       
  1326 
       
  1327 CAlfEffectObserver::CAlfEffectObserver()
       
  1328     {
       
  1329     }
       
  1330 
       
  1331  
       
  1332 
       
  1333 
  1234 //end of file    
  1334 //end of file