contentcontrolsrv/ccsrv/src/ccsrv.cpp
branchRCL_3
changeset 15 a0713522ab97
parent 11 bd874ee5e5e2
child 22 1b207dd38b72
equal deleted inserted replaced
14:15e4dd19031c 15:a0713522ab97
   136 //
   136 //
   137 CCcSrv::~CCcSrv()
   137 CCcSrv::~CCcSrv()
   138     {
   138     {
   139     iSessions.Close();
   139     iSessions.Close();
   140     iProviders.Close();
   140     iProviders.Close();
       
   141     iObservers.Close();
   141     }
   142     }
   142 
   143 
   143 // -----------------------------------------------------------------------------
   144 // -----------------------------------------------------------------------------
   144 // CCcSrv::NewSessionL
   145 // CCcSrv::NewSessionL
   145 // -----------------------------------------------------------------------------
   146 // -----------------------------------------------------------------------------
   183 // CCcSrv::DropSession
   184 // CCcSrv::DropSession
   184 // -----------------------------------------------------------------------------
   185 // -----------------------------------------------------------------------------
   185 //
   186 //
   186 void CCcSrv::DropSession( CCcSrvSession* aSession )
   187 void CCcSrv::DropSession( CCcSrvSession* aSession )
   187     {
   188     {
       
   189     // Remove possible provider
       
   190     for ( TUint32 i = 0; i < iProviders.Count(); i++ )
       
   191         {
       
   192         if ( iProviders[ i ].iSession->Id() == aSession->Id() )
       
   193             {
       
   194             iProviders.Remove( i );
       
   195             break;
       
   196             }
       
   197         }
       
   198     // Unregister possible observations and remove observer
       
   199     for ( TUint32 i = 0; i < iObservers.Count(); )
       
   200         {
       
   201         if ( iObservers[ i ].iObserver == aSession->Id() )
       
   202             {
       
   203             for ( TUint32 j = 0; j < iProviders.Count(); j++ )
       
   204                 {
       
   205                 if ( iObservers[ i ].iProviderId == iProviders[ j ].iId )
       
   206                     {
       
   207                     TRAP_IGNORE( iProviders[ j ].iSession->
       
   208                         UnregisterObserverSessionL( aSession->Id() ) );
       
   209                     }
       
   210                 }
       
   211             iObservers.Remove( i );
       
   212             }
       
   213         else
       
   214             {
       
   215             // Get next observer
       
   216             i++;
       
   217             }
       
   218         }
       
   219     // Remove session
   188     for ( TUint32 i = 0; i < iSessions.Count(); i++ )
   220     for ( TUint32 i = 0; i < iSessions.Count(); i++ )
   189         {
   221         {
   190         if ( iSessions[ i ]->Id() == aSession->Id() )
   222         if ( iSessions[ i ]->Id() == aSession->Id() )
   191             {
   223             {
   192             iSessions.Remove( i );
   224             iSessions.Remove( i );
   193             break;
   225             break;
   194             }
   226             }
   195         }
   227         }
   196     // Unregister possible observations
       
   197     for ( TUint32 i = 0; i < iProviders.Count(); i++ )
       
   198         {
       
   199         TRAP_IGNORE( iProviders[ i ].iSession->
       
   200             UnregisterObserverSessionL( aSession->Id() ) );
       
   201         }
       
   202     
   228     
   203     // Remove possible provider
       
   204     for ( TUint32 i = 0; i < iProviders.Count(); i++ )
       
   205         {
       
   206         if ( iProviders[ i ].iId == aSession->Id() )
       
   207             {
       
   208             iProviders.Remove( i );
       
   209             break;
       
   210             }
       
   211         }
       
   212     if ( iSessions.Count() == 0 )
   229     if ( iSessions.Count() == 0 )
   213         {
   230         {
   214         // Last session dropped -> stop server
   231         // Last session dropped -> stop server
   215         CActiveScheduler::Stop();
   232         CActiveScheduler::Stop();
   216         }
   233         }
   234     CCcSrv::TCcProvider provider;
   251     CCcSrv::TCcProvider provider;
   235     provider.iId = aProvider;
   252     provider.iId = aProvider;
   236     provider.iSession = aSession;
   253     provider.iSession = aSession;
   237     iProviders.Append( provider );
   254     iProviders.Append( provider );
   238     
   255     
       
   256     // Register possible active observers
       
   257     for ( TUint32 i = 0; i < iObservers.Count(); i++ )
       
   258         {
       
   259         if ( iObservers[ i ].iProviderId == aProvider )
       
   260             {
       
   261             provider.iSession->RegisterObserverSessionL( iObservers[ i ].iObserver );
       
   262             }
       
   263         }
       
   264     
   239     }
   265     }
   240 
   266 
   241 // -----------------------------------------------------------------------------
   267 // -----------------------------------------------------------------------------
   242 // CCcSrv::RegisterObserverL
   268 // CCcSrv::RegisterObserverL
   243 // -----------------------------------------------------------------------------
   269 // -----------------------------------------------------------------------------
   244 //
   270 //
   245 void CCcSrv::RegisterObserverL( 
   271 void CCcSrv::RegisterObserverL( 
   246     TUint32 aProvider,
   272     TUint32 aProvider,
   247     CCcSrvSession* aSession )
   273     CCcSrvSession* aSession )
   248     {
   274     {
   249     TBool found( EFalse );
   275     for ( TUint32 i = 0; i < iProviders.Count(); i++ )
   250     for ( TUint32 i = 0; i < iProviders.Count() && !found; i++ )
       
   251         {
   276         {
   252         if ( iProviders[ i ].iId == aProvider )
   277         if ( iProviders[ i ].iId == aProvider )
   253             {
   278             {
   254             iProviders[ i ].iSession->RegisterObserverSessionL( aSession->Id() );   
   279             iProviders[ i ].iSession->RegisterObserverSessionL( aSession->Id() );
   255             found = ETrue;
   280             break;
   256             }
   281             }
   257         }
   282         }
   258     if ( !found )
   283     CCcSrv::TCcObserver observer;
   259         {
   284     observer.iProviderId = aProvider;
   260         User::Leave( KErrNotFound );
   285     observer.iObserver = aSession->Id();
   261         }
   286     iObservers.Append( observer );
   262     }
   287     }
   263 
   288 
   264 // -----------------------------------------------------------------------------
   289 // -----------------------------------------------------------------------------
   265 // CCcSrv::ResolveProviderAddressL
   290 // CCcSrv::ResolveProviderAddressL
   266 // -----------------------------------------------------------------------------
   291 // -----------------------------------------------------------------------------