harvester/client/src/harvesterclient.cpp
changeset 54 a3cc46f37772
parent 36 aa5a574040a4
equal deleted inserted replaced
36:aa5a574040a4 54:a3cc46f37772
    52 EXPORT_C RHarvesterClient::RHarvesterClient() : RSessionBase() 
    52 EXPORT_C RHarvesterClient::RHarvesterClient() : RSessionBase() 
    53     {
    53     {
    54     WRITELOG( "RHarvesterClient::RHarvesterClient() - Constructor" );
    54     WRITELOG( "RHarvesterClient::RHarvesterClient() - Constructor" );
    55     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_RHARVESTERCLIENT, "RHarvesterClient::RHarvesterClient" );
    55     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_RHARVESTERCLIENT, "RHarvesterClient::RHarvesterClient" );
    56     
    56     
    57     iHarvesterClientAO = NULL;
       
    58     iObserver = NULL;
    57     iObserver = NULL;
    59     iHEO = NULL;
    58     iHEO = NULL;
    60     iRequestQueue = NULL;
    59     iRequestQueue = NULL;
       
    60     iHarvesterClientAO = NULL;
       
    61     iSessionWatcher = NULL;
    61     }
    62     }
    62 
    63 
    63 // ----------------------------------------------------------------------------------------
    64 // ----------------------------------------------------------------------------------------
    64 // Connect
    65 // Connect
    65 // ----------------------------------------------------------------------------------------
    66 // ----------------------------------------------------------------------------------------
    66 //
    67 //
    67 EXPORT_C TInt RHarvesterClient::Connect()
    68 EXPORT_C TInt RHarvesterClient::Connect()
    68     {
    69     {
    69     WRITELOG( "RHarvesterClient::Connect()" );
    70     WRITELOG( "RHarvesterClient::Connect()" );
    70     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_CONNECT, "RHarvesterClient::Connect" );
    71     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_CONNECT, "RHarvesterClient::Connect" );
    71     
       
    72     
    72     
    73     RProperty property;
    73     RProperty property;
    74     const TInt error( property.Attach( KHarvesterPSShutdown, KShutdown, EOwnerThread ) );
    74     const TInt error( property.Attach( KHarvesterPSShutdown, KShutdown, EOwnerThread ) );
    75     TInt value = 0;
    75     TInt value = 0;
    76     property.Get( value );
    76     property.Get( value );
   112         WRITELOG( "RHarvesterClient::Connect() - creating session" );
   112         WRITELOG( "RHarvesterClient::Connect() - creating session" );
   113         err = CreateSession( KHarvesterServerName, Version(), KDefaultMessageSlots );
   113         err = CreateSession( KHarvesterServerName, Version(), KDefaultMessageSlots );
   114         }
   114         }
   115     else
   115     else
   116         {
   116         {
       
   117         WRITELOG1( "RHarvesterClient::Connect() - Server is not running or could not be started, error &d", err );
       
   118         delete iRequestQueue;
       
   119         iRequestQueue = NULL;
   117         delete iHarvesterClientAO;
   120         delete iHarvesterClientAO;
   118         iHarvesterClientAO = NULL;
   121         iHarvesterClientAO = NULL;
       
   122         return err;
       
   123         }
       
   124 
       
   125     if( err != KErrNone )
       
   126         {
       
   127         WRITELOG1( "RHarvesterClient::Connect() - Session creation failed, error &d", err );
   119         delete iRequestQueue;
   128         delete iRequestQueue;
   120         iRequestQueue = NULL;
   129         iRequestQueue = NULL;
   121         }
   130         delete iHarvesterClientAO;
   122 
   131         iHarvesterClientAO = NULL;    
   123 #ifdef _DEBUG
   132         }
   124     if ( err != KErrNone )
   133     
   125         {
   134     iHEO = NULL;
   126         WRITELOG1( "RHarvesterClient::Connect() - Server is not running or could not be started, error &d", err );
   135     
   127         }
   136     iSessionWatcher = NULL;
   128     else
   137     
   129         {
       
   130         WRITELOG( "RHarvesterClient::Connect() - no errors" );
       
   131         }
       
   132     WRITELOG( "RHarvesterClient::Connect() - end" );
   138     WRITELOG( "RHarvesterClient::Connect() - end" );
   133 #endif
       
   134 
       
   135     iHEO = NULL;
       
   136     
       
   137     iSessionWatcher = NULL;
       
   138     
   139     
   139     return err;
   140     return err;
   140     }
   141     }
   141 
   142 
   142 // ----------------------------------------------------------------------------------------
   143 // ----------------------------------------------------------------------------------------
   181     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_CLOSE, "RHarvesterClient::Close" );
   182     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_CLOSE, "RHarvesterClient::Close" );
   182     
   183     
   183     delete iSessionWatcher;
   184     delete iSessionWatcher;
   184     iSessionWatcher = NULL;
   185     iSessionWatcher = NULL;
   185     
   186     
   186     // cancels Harvest Complete request if it exist at server
   187     WRITELOG( "RHarvesterClient::Close() - cancelling pending harvesting requests" );
       
   188     if( iRequestQueue && iRequestQueue->RequestsPending() )
       
   189         {
       
   190         iRequestQueue->Cancel();
       
   191         }
       
   192     
       
   193     WRITELOG( "RHarvesterClient::Close() - removing harvester client observer" );
       
   194     if( iObserver )
       
   195         {
       
   196         RemoveObserver( iObserver );
       
   197         }
   187     UnregisterHarvestComplete();
   198     UnregisterHarvestComplete();
   188     
   199     
   189     WRITELOG( "RHarvesterClient::Close() - UnregisterHarvest done" );
   200     WRITELOG( "RHarvesterClient::Close() - UnregisterHarvest done" );
   190     
   201     
       
   202     WRITELOG( "RHarvesterClient::Close() - forcing remaining harvesting requests" );
   191     if( iRequestQueue && iRequestQueue->RequestsPending() )
   203     if( iRequestQueue && iRequestQueue->RequestsPending() )
   192         {
   204         {
   193         iRequestQueue->Cancel();
   205         WRITELOG( "RHarvesterClient::Close() - Pending harvesting requests detected -> ForceHarvest" );
   194         iRequestQueue->ForceRequests();
   206         iRequestQueue->ForceRequests();
   195         }
   207         }
       
   208     
       
   209     WRITELOG( "RHarvesterClient::Close() - ForceHarvest done" );
   196     
   210     
   197     delete iRequestQueue;
   211     delete iRequestQueue;
   198     iRequestQueue = NULL;
   212     iRequestQueue = NULL;
   199     
   213     
       
   214     delete iHEO;
       
   215     iHEO = NULL;
       
   216     
       
   217     WRITELOG( "RHarvesterClient::Close() - deleting harvester client AO" );
   200     delete iHarvesterClientAO;
   218     delete iHarvesterClientAO;
   201     iHarvesterClientAO = NULL;
   219     iHarvesterClientAO = NULL;
   202     
   220     
   203     delete iHEO;
       
   204     iHEO = NULL;
       
   205     
       
   206     WRITELOG( "RHarvesterClient::Close() - Closing session" );
   221     WRITELOG( "RHarvesterClient::Close() - Closing session" );
   207     
   222     
   208     RSessionBase::Close();
   223     RSessionBase::Close();
   209     }
   224     }
   210 
   225 
   217     WRITELOG( "RHarvesterClient::SetObserver()" );
   232     WRITELOG( "RHarvesterClient::SetObserver()" );
   218     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_SETOBSERVER, "RHarvesterClient::SetObserver" );
   233     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_SETOBSERVER, "RHarvesterClient::SetObserver" );
   219 
   234 
   220     if ( iHarvesterClientAO )
   235     if ( iHarvesterClientAO )
   221         {
   236         {
   222         iHarvesterClientAO->SetObserver( aObserver );
   237        iHarvesterClientAO->SetObserver( aObserver );
   223         }
   238        }
   224 	iObserver = aObserver;
   239 	iObserver = aObserver;
   225     }
   240     }
   226 
   241 
   227 // ----------------------------------------------------------------------------------------
   242 // ----------------------------------------------------------------------------------------
   228 // RemoveObserver
   243 // RemoveObserver
   231 EXPORT_C void RHarvesterClient::RemoveObserver( MHarvestObserver* aObserver )
   246 EXPORT_C void RHarvesterClient::RemoveObserver( MHarvestObserver* aObserver )
   232     {
   247     {
   233     WRITELOG( "RHarvesterClient::RemoveObserver()" );
   248     WRITELOG( "RHarvesterClient::RemoveObserver()" );
   234     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REMOVEOBSERVER, "RHarvesterClient::RemoveObserver" );
   249     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REMOVEOBSERVER, "RHarvesterClient::RemoveObserver" );
   235     
   250     
   236     if ( iHarvesterClientAO )
   251 	if ( aObserver == iObserver && iObserver )
   237         {
       
   238         iHarvesterClientAO->RemoveObserver( aObserver );
       
   239         }
       
   240     
       
   241 	if ( aObserver == iObserver )
       
   242 		{
   252 		{
   243 		if ( iObserver )
   253 		WRITELOG( "RHarvesterClient::RemoveObserver() - deleting observer" );
   244 			{
   254 		
   245 			WRITELOG( "CHarvesterClientAO::RemoveObserver() - deleting observer" );
   255 	    if ( iHarvesterClientAO )
   246 			iObserver = NULL;
   256 	        {
   247 			}
   257 	        WRITELOG( "RHarvesterClient::RemoveObserver() - calling iHarvesterClientAO->RemoveObserver" );
       
   258 	        iHarvesterClientAO->RemoveObserver( aObserver );
       
   259 	        }
       
   260 		
       
   261 		iObserver = NULL;
   248 		}
   262 		}
   249     }
   263     }
   250 
   264 
   251 // ----------------------------------------------------------------------------------------
   265 // ----------------------------------------------------------------------------------------
   252 // AddHarvesterEventObserver
   266 // AddHarvesterEventObserver
   298 EXPORT_C void RHarvesterClient::HarvestFile( const TDesC& aURI, RArray<TItemId>& aAlbumIds, TBool aAddLocation )
   312 EXPORT_C void RHarvesterClient::HarvestFile( const TDesC& aURI, RArray<TItemId>& aAlbumIds, TBool aAddLocation )
   299     {
   313     {
   300     WRITELOG1( "RHarvesterClient::HarvestFile() - file %S", &aURI );
   314     WRITELOG1( "RHarvesterClient::HarvestFile() - file %S", &aURI );
   301     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_HARVESTFILE, "RHarvesterClient::HarvestFile" );
   315     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_HARVESTFILE, "RHarvesterClient::HarvestFile" );
   302     
   316     
   303     
       
   304     HBufC8* paramBuf = NULL;
   317     HBufC8* paramBuf = NULL;
   305     TRAPD( err, paramBuf = SerializeArrayL( aAlbumIds ) );
   318     TRAPD( err, paramBuf = SerializeArrayL( aAlbumIds ) );
   306     if ( err )
   319     if ( err )
   307     	{
   320     	{
   308         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create serialized array, error: %d", err );
   321         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create serialized array, error: %d", err );
   333         if( err && iObserver)
   346         if( err && iObserver)
   334             {
   347             {
   335             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   348             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   336             iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy );  
   349             iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy );  
   337             delete harvestFileActive;
   350             delete harvestFileActive;
       
   351             harvestFileActive = NULL;
   338             }
   352             }
   339         else if( err )
   353         else if( err )
   340             {
   354             {
   341             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   355             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   342             delete harvestFileActive;
   356             delete harvestFileActive;
       
   357             harvestFileActive = NULL;
   343             }
   358             }
   344         else
   359         else
   345             {
   360             {
   346             WRITELOG( "RHarvesterClient::HarvestFile() - harvesting request added to queue" );
   361             WRITELOG( "RHarvesterClient::HarvestFile() - harvesting request added to queue" );
   347             iRequestQueue->Process();
   362             iRequestQueue->Process();
   350     else if( iObserver )
   365     else if( iObserver )
   351         {
   366         {
   352         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   367         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   353         iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected );  
   368         iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected );  
   354         delete harvestFileActive;
   369         delete harvestFileActive;
       
   370         harvestFileActive = NULL;
   355         }
   371         }
   356     else
   372     else
   357         {
   373         {
   358         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   374         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   359         delete harvestFileActive;
   375         delete harvestFileActive;
       
   376         harvestFileActive = NULL;
   360         }
   377         }
   361     WRITELOG( "RHarvesterClient::HarvestFile() - end" );
   378     WRITELOG( "RHarvesterClient::HarvestFile() - end" );
   362     }
   379     }
   363 
   380 
   364 // ----------------------------------------------------------------------------------------
   381 // ----------------------------------------------------------------------------------------
   406         if( err && iObserver)
   423         if( err && iObserver)
   407             {
   424             {
   408             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   425             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   409             iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy );  
   426             iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy );  
   410             delete harvestFileActive;
   427             delete harvestFileActive;
       
   428             harvestFileActive = NULL;
   411             }
   429             }
   412         else if( err )
   430         else if( err )
   413             {
   431             {
   414             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   432             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   415             delete harvestFileActive;
   433             delete harvestFileActive;
       
   434             harvestFileActive = NULL;
   416             }
   435             }
   417         else
   436         else
   418             {
   437             {
   419             iRequestQueue->Process();
   438             iRequestQueue->Process();
   420             }
   439             }
   422     else if( iObserver )
   441     else if( iObserver )
   423         {
   442         {
   424         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   443         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   425         iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected );  
   444         iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected );  
   426         delete harvestFileActive;
   445         delete harvestFileActive;
       
   446         harvestFileActive = NULL;
   427         }
   447         }
   428     else
   448     else
   429         {
   449         {
   430         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   450         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   431         delete harvestFileActive;
   451         delete harvestFileActive;
       
   452         harvestFileActive = NULL;
   432         }
   453         }
   433     }
   454     }
   434 
   455 
   435 // ----------------------------------------------------------------------------------------
   456 // ----------------------------------------------------------------------------------------
   436 // AddSessionObserver
   457 // AddSessionObserver
   462 // ----------------------------------------------------------------------------------------
   483 // ----------------------------------------------------------------------------------------
   463 // RegisterHarvestComplete
   484 // RegisterHarvestComplete
   464 // ----------------------------------------------------------------------------------------
   485 // ----------------------------------------------------------------------------------------
   465 //
   486 //
   466 void RHarvesterClient::RegisterHarvestComplete(TDes& aURI, TRequestStatus& aStatus)
   487 void RHarvesterClient::RegisterHarvestComplete(TDes& aURI, TRequestStatus& aStatus)
   467 	{	
   488 	{
   468 	TIpcArgs ipcArgs( &aURI );
   489 	TIpcArgs ipcArgs( &aURI );
   469 	OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REGISTERHARVESTCOMPLETE, "RHarvesterClient::RegisterHarvestComplete" );
   490 	OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REGISTERHARVESTCOMPLETE, "RHarvesterClient::RegisterHarvestComplete" );
   470 	
       
   471 	
   491 	
   472 	if( !iHandle )
   492 	if( !iHandle )
   473 		{
   493 		{
   474 		return;
   494 		return;
   475 		}
   495 		}
   486 	if( !iHandle )
   506 	if( !iHandle )
   487 		{
   507 		{
   488 		return;
   508 		return;
   489 		}	
   509 		}	
   490 	
   510 	
   491 	Send( EUnregisterHarvestComplete );
   511 	SendReceive( EUnregisterHarvestComplete );
   492 	}
   512 	}
   493 
   513 
   494 // ----------------------------------------------------------------------------------------
   514 // ----------------------------------------------------------------------------------------
   495 // HarvestFile
   515 // HarvestFile
   496 // ----------------------------------------------------------------------------------------
   516 // ----------------------------------------------------------------------------------------
   497 //
   517 //
   498 void RHarvesterClient::HarvestFile( TInt& aService, TIpcArgs& aArgs, TRequestStatus& aStatus )
   518 void RHarvesterClient::HarvestFile( TInt& aService, TIpcArgs& aArgs, TRequestStatus& aStatus )
   499     {
   519     {
   500     // send to server harvesting complete observer
   520     // send to server harvesting complete observer
   501     iHarvesterClientAO->Active();
   521     if( iObserver && iHarvesterClientAO )
       
   522         {
       
   523         iHarvesterClientAO->Active();
       
   524         }
   502     SendReceive( aService, aArgs, aStatus );
   525     SendReceive( aService, aArgs, aStatus );
   503     }
   526     }
   504 
   527 
   505 // ----------------------------------------------------------------------------------------
   528 // ----------------------------------------------------------------------------------------
   506 // ForceHarvestFile
   529 // ForceHarvestFile
   507 // ----------------------------------------------------------------------------------------
   530 // ----------------------------------------------------------------------------------------
   508 //
   531 //
   509 void RHarvesterClient::ForceHarvestFile( TInt& aService, TIpcArgs& aArgs )
   532 void RHarvesterClient::ForceHarvestFile( TInt& aService, TIpcArgs& aArgs )
   510     {
   533     {
   511     // send to server harvesting complete observer
       
   512     iHarvesterClientAO->Active();
       
   513     SendReceive( aService, aArgs );
   534     SendReceive( aService, aArgs );
   514     }
   535     }
   515 
   536 
   516 // ----------------------------------------------------------------------------------------
   537 // ----------------------------------------------------------------------------------------
   517 // Version
   538 // Version