harvester/client/src/harvesterclient.cpp
changeset 45 a93990e5815e
parent 36 aa5a574040a4
child 52 40db28bb26b8
equal deleted inserted replaced
36:aa5a574040a4 45:a93990e5815e
    17 #include <e32property.h> 
    17 #include <e32property.h> 
    18 
    18 
    19 #include "harvesterclient.h"
    19 #include "harvesterclient.h"
    20 #include "harvestercommon.h"
    20 #include "harvestercommon.h"
    21 #include "harvesterrequestqueue.h"
    21 #include "harvesterrequestqueue.h"
       
    22 #include "harvesternotificationqueue.h"
    22 #include "harvestereventobserverao.h"
    23 #include "harvestereventobserverao.h"
    23 #include "harvesterlog.h"
    24 #include "harvesterlog.h"
    24 #include "harvesterclientao.h"
    25 #include "harvesterclientao.h"
    25 #include "harvestersessionwatcher.h"
    26 #include "harvestersessionwatcher.h"
    26 #include "mdsutils.h"
    27 #include "mdsutils.h"
    52 EXPORT_C RHarvesterClient::RHarvesterClient() : RSessionBase() 
    53 EXPORT_C RHarvesterClient::RHarvesterClient() : RSessionBase() 
    53     {
    54     {
    54     WRITELOG( "RHarvesterClient::RHarvesterClient() - Constructor" );
    55     WRITELOG( "RHarvesterClient::RHarvesterClient() - Constructor" );
    55     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_RHARVESTERCLIENT, "RHarvesterClient::RHarvesterClient" );
    56     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_RHARVESTERCLIENT, "RHarvesterClient::RHarvesterClient" );
    56     
    57     
    57     iHarvesterClientAO = NULL;
       
    58     iObserver = NULL;
    58     iObserver = NULL;
    59     iHEO = NULL;
    59     iHEO = NULL;
    60     iRequestQueue = NULL;
    60     iRequestQueue = NULL;
       
    61     iNotificationQueue = 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 );
    79     if ( error != KErrNone || value > KErrNone )
    79     if ( error != KErrNone || value > KErrNone )
    80         {
    80         {
    81         return KErrLocked;
    81         return KErrLocked;
    82         }
    82         }
    83     
    83     
    84     if( iHarvesterClientAO )
    84     if( iRequestQueue )
    85     	{
    85     	{
    86     	return KErrAlreadyExists;
    86     	return KErrAlreadyExists;
    87     	}
    87     	}
    88     
    88     
    89     TRAPD( err, iHarvesterClientAO = CHarvesterClientAO::NewL(*this) );
       
    90     if ( err != KErrNone )
       
    91         {
       
    92         WRITELOG( "RHarvesterClient::RHarvesterClient() - Couldn't create active object" );
       
    93         return err;
       
    94         }
       
    95     
       
    96     // request processor
    89     // request processor
    97     TRAP( err, iRequestQueue = CHarvesterRequestQueue::NewL() )
    90     TRAPD( err, iRequestQueue = CHarvesterRequestQueue::NewL() )
    98         {
    91         {
    99         if ( err != KErrNone )
    92         if ( err != KErrNone )
   100             {
    93             {
   101             WRITELOG( "RHarvesterClient::RHarvesterClient() - Couldn't create harvester request queue" );
    94             WRITELOG( "RHarvesterClient::RHarvesterClient() - Couldn't create harvester request queue" );
   102             delete iHarvesterClientAO;
    95             return err;
   103             iHarvesterClientAO = NULL;
    96             }
       
    97         }
       
    98 
       
    99     // request processor
       
   100     TRAP( err, iNotificationQueue = CHarvesterNotificationQueue::NewL() )
       
   101         {
       
   102         if ( err != KErrNone )
       
   103             {
       
   104             WRITELOG( "RHarvesterClient::RHarvesterClient() - Couldn't create harvester notification queue" );
       
   105             delete iRequestQueue;
       
   106             iRequestQueue = NULL;
   104             return err;
   107             return err;
   105             }
   108             }
   106         }
   109         }
   107     
   110     
   108     err = ::StartServer();
   111     err = ::StartServer();
   112         WRITELOG( "RHarvesterClient::Connect() - creating session" );
   115         WRITELOG( "RHarvesterClient::Connect() - creating session" );
   113         err = CreateSession( KHarvesterServerName, Version(), KDefaultMessageSlots );
   116         err = CreateSession( KHarvesterServerName, Version(), KDefaultMessageSlots );
   114         }
   117         }
   115     else
   118     else
   116         {
   119         {
   117         delete iHarvesterClientAO;
       
   118         iHarvesterClientAO = NULL;
       
   119         delete iRequestQueue;
   120         delete iRequestQueue;
   120         iRequestQueue = NULL;
   121         iRequestQueue = NULL;
       
   122         delete iNotificationQueue;
       
   123         iNotificationQueue = NULL;
   121         }
   124         }
   122 
   125 
   123 #ifdef _DEBUG
   126 #ifdef _DEBUG
   124     if ( err != KErrNone )
   127     if ( err != KErrNone )
   125         {
   128         {
   183     delete iSessionWatcher;
   186     delete iSessionWatcher;
   184     iSessionWatcher = NULL;
   187     iSessionWatcher = NULL;
   185     
   188     
   186     // cancels Harvest Complete request if it exist at server
   189     // cancels Harvest Complete request if it exist at server
   187     UnregisterHarvestComplete();
   190     UnregisterHarvestComplete();
       
   191     delete iNotificationQueue;
       
   192     iNotificationQueue = NULL;
   188     
   193     
   189     WRITELOG( "RHarvesterClient::Close() - UnregisterHarvest done" );
   194     WRITELOG( "RHarvesterClient::Close() - UnregisterHarvest done" );
   190     
   195     
   191     if( iRequestQueue && iRequestQueue->RequestsPending() )
   196     if( iRequestQueue && iRequestQueue->RequestsPending() )
   192         {
   197         {
   195         }
   200         }
   196     
   201     
   197     delete iRequestQueue;
   202     delete iRequestQueue;
   198     iRequestQueue = NULL;
   203     iRequestQueue = NULL;
   199     
   204     
   200     delete iHarvesterClientAO;
       
   201     iHarvesterClientAO = NULL;
       
   202     
       
   203     delete iHEO;
   205     delete iHEO;
   204     iHEO = NULL;
   206     iHEO = NULL;
   205     
   207     
   206     WRITELOG( "RHarvesterClient::Close() - Closing session" );
   208     WRITELOG( "RHarvesterClient::Close() - Closing session" );
   207     
   209     
   215 EXPORT_C void RHarvesterClient::SetObserver( MHarvestObserver* aObserver )
   217 EXPORT_C void RHarvesterClient::SetObserver( MHarvestObserver* aObserver )
   216     {
   218     {
   217     WRITELOG( "RHarvesterClient::SetObserver()" );
   219     WRITELOG( "RHarvesterClient::SetObserver()" );
   218     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_SETOBSERVER, "RHarvesterClient::SetObserver" );
   220     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_SETOBSERVER, "RHarvesterClient::SetObserver" );
   219 
   221 
   220     if ( iHarvesterClientAO )
       
   221         {
       
   222         iHarvesterClientAO->SetObserver( aObserver );
       
   223         }
       
   224 	iObserver = aObserver;
   222 	iObserver = aObserver;
       
   223 	iNotificationQueue->SetObserver( iObserver );
   225     }
   224     }
   226 
   225 
   227 // ----------------------------------------------------------------------------------------
   226 // ----------------------------------------------------------------------------------------
   228 // RemoveObserver
   227 // RemoveObserver
   229 // ----------------------------------------------------------------------------------------
   228 // ----------------------------------------------------------------------------------------
   231 EXPORT_C void RHarvesterClient::RemoveObserver( MHarvestObserver* aObserver )
   230 EXPORT_C void RHarvesterClient::RemoveObserver( MHarvestObserver* aObserver )
   232     {
   231     {
   233     WRITELOG( "RHarvesterClient::RemoveObserver()" );
   232     WRITELOG( "RHarvesterClient::RemoveObserver()" );
   234     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REMOVEOBSERVER, "RHarvesterClient::RemoveObserver" );
   233     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REMOVEOBSERVER, "RHarvesterClient::RemoveObserver" );
   235     
   234     
   236     if ( iHarvesterClientAO )
       
   237         {
       
   238         iHarvesterClientAO->RemoveObserver( aObserver );
       
   239         }
       
   240     
       
   241 	if ( aObserver == iObserver )
   235 	if ( aObserver == iObserver )
   242 		{
   236 		{
   243 		if ( iObserver )
   237 		WRITELOG( "RHarvesterClient::RemoveObserver() - deleting observer" );
   244 			{
   238 		iObserver = NULL;
   245 			WRITELOG( "CHarvesterClientAO::RemoveObserver() - deleting observer" );
   239 		iNotificationQueue->SetObserver( iObserver );
   246 			iObserver = NULL;
       
   247 			}
       
   248 		}
   240 		}
   249     }
   241     }
   250 
   242 
   251 // ----------------------------------------------------------------------------------------
   243 // ----------------------------------------------------------------------------------------
   252 // AddHarvesterEventObserver
   244 // AddHarvesterEventObserver
   298 EXPORT_C void RHarvesterClient::HarvestFile( const TDesC& aURI, RArray<TItemId>& aAlbumIds, TBool aAddLocation )
   290 EXPORT_C void RHarvesterClient::HarvestFile( const TDesC& aURI, RArray<TItemId>& aAlbumIds, TBool aAddLocation )
   299     {
   291     {
   300     WRITELOG1( "RHarvesterClient::HarvestFile() - file %S", &aURI );
   292     WRITELOG1( "RHarvesterClient::HarvestFile() - file %S", &aURI );
   301     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_HARVESTFILE, "RHarvesterClient::HarvestFile" );
   293     OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_HARVESTFILE, "RHarvesterClient::HarvestFile" );
   302     
   294     
   303     
       
   304     HBufC8* paramBuf = NULL;
   295     HBufC8* paramBuf = NULL;
   305     TRAPD( err, paramBuf = SerializeArrayL( aAlbumIds ) );
   296     TRAPD( err, paramBuf = SerializeArrayL( aAlbumIds ) );
   306     if ( err )
   297     if ( err )
   307     	{
   298     	{
   308         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create serialized array, error: %d", err );
   299         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create serialized array, error: %d", err );
   312             }
   303             }
   313     	return;
   304     	return;
   314     	}
   305     	}
   315         
   306         
   316     CHarvesterRequestActive* harvestFileActive( NULL );
   307     CHarvesterRequestActive* harvestFileActive( NULL );
   317     TRAP( err, harvestFileActive = CHarvesterRequestActive::NewL( *this, iObserver, (TInt)EHarvestFile, aURI, 
   308     TRAP( err, harvestFileActive = CHarvesterRequestActive::NewL( *this, (TInt)EHarvestFile, aURI, 
   318                                                                                                    paramBuf, aAddLocation, iRequestQueue ) );
   309                                                                                                    paramBuf, aAddLocation, iRequestQueue ) );
   319     if( err )
   310     if( err )
   320         {
   311         {
   321         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create harvesting request, error: %d", err );
   312         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create harvesting request, error: %d", err );
   322         if( iObserver )
   313         if( iObserver )
   333         if( err && iObserver)
   324         if( err && iObserver)
   334             {
   325             {
   335             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   326             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   336             iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy );  
   327             iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy );  
   337             delete harvestFileActive;
   328             delete harvestFileActive;
       
   329             harvestFileActive = NULL;
   338             }
   330             }
   339         else if( err )
   331         else if( err )
   340             {
   332             {
   341             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   333             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   342             delete harvestFileActive;
   334             delete harvestFileActive;
       
   335             harvestFileActive = NULL;
   343             }
   336             }
   344         else
   337         else
   345             {
   338             {
   346             WRITELOG( "RHarvesterClient::HarvestFile() - harvesting request added to queue" );
   339             WRITELOG( "RHarvesterClient::HarvestFile() - harvesting request added to queue" );
   347             iRequestQueue->Process();
   340             iRequestQueue->Process();
   350     else if( iObserver )
   343     else if( iObserver )
   351         {
   344         {
   352         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   345         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   353         iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected );  
   346         iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected );  
   354         delete harvestFileActive;
   347         delete harvestFileActive;
       
   348         harvestFileActive = NULL;
   355         }
   349         }
   356     else
   350     else
   357         {
   351         {
   358         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   352         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   359         delete harvestFileActive;
   353         delete harvestFileActive;
       
   354         harvestFileActive = NULL;
   360         }
   355         }
   361     WRITELOG( "RHarvesterClient::HarvestFile() - end" );
   356     WRITELOG( "RHarvesterClient::HarvestFile() - end" );
   362     }
   357     }
   363 
   358 
   364 // ----------------------------------------------------------------------------------------
   359 // ----------------------------------------------------------------------------------------
   385             }
   380             }
   386         return;
   381         return;
   387         }
   382         }
   388 
   383 
   389     CHarvesterRequestActive* harvestFileActive( NULL );
   384     CHarvesterRequestActive* harvestFileActive( NULL );
   390     TRAP( err, harvestFileActive = CHarvesterRequestActive::NewL( *this, iObserver, (TInt)EHarvestFile, aURI, 
   385     TRAP( err, harvestFileActive = CHarvesterRequestActive::NewL( *this, (TInt)EHarvestFile, aURI, 
   391                                                                                                    paramBuf, aAddLocation, iRequestQueue ) );
   386                                                                                                    paramBuf, aAddLocation, iRequestQueue ) );
   392     if( err )
   387     if( err )
   393         {
   388         {
   394         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create harvesting request, error: %d", err );
   389         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot create harvesting request, error: %d", err );
   395         if( iObserver )
   390         if( iObserver )
   406         if( err && iObserver)
   401         if( err && iObserver)
   407             {
   402             {
   408             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   403             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   409             iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy );  
   404             iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrServerBusy );  
   410             delete harvestFileActive;
   405             delete harvestFileActive;
       
   406             harvestFileActive = NULL;
   411             }
   407             }
   412         else if( err )
   408         else if( err )
   413             {
   409             {
   414             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   410             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrServerBusy );
   415             delete harvestFileActive;
   411             delete harvestFileActive;
       
   412             harvestFileActive = NULL;
   416             }
   413             }
   417         else
   414         else
   418             {
   415             {
   419             iRequestQueue->Process();
   416             iRequestQueue->Process();
   420             }
   417             }
   422     else if( iObserver )
   419     else if( iObserver )
   423         {
   420         {
   424         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   421         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   425         iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected );  
   422         iObserver->HarvestingComplete( const_cast<TDesC&>(aURI), KErrDisconnected );  
   426         delete harvestFileActive;
   423         delete harvestFileActive;
       
   424         harvestFileActive = NULL;
   427         }
   425         }
   428     else
   426     else
   429         {
   427         {
   430         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   428         WRITELOG1( "RHarvesterClient::HarvestFile() - cannot not send harvest request to server, error: %d", KErrDisconnected );
   431         delete harvestFileActive;
   429         delete harvestFileActive;
       
   430         harvestFileActive = NULL;
   432         }
   431         }
   433     }
   432     }
   434 
   433 
   435 // ----------------------------------------------------------------------------------------
   434 // ----------------------------------------------------------------------------------------
   436 // AddSessionObserver
   435 // AddSessionObserver
   465 //
   464 //
   466 void RHarvesterClient::RegisterHarvestComplete(TDes& aURI, TRequestStatus& aStatus)
   465 void RHarvesterClient::RegisterHarvestComplete(TDes& aURI, TRequestStatus& aStatus)
   467 	{	
   466 	{	
   468 	TIpcArgs ipcArgs( &aURI );
   467 	TIpcArgs ipcArgs( &aURI );
   469 	OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REGISTERHARVESTCOMPLETE, "RHarvesterClient::RegisterHarvestComplete" );
   468 	OstTrace0( TRACE_NORMAL, RHARVESTERCLIENT_REGISTERHARVESTCOMPLETE, "RHarvesterClient::RegisterHarvestComplete" );
   470 	
       
   471 	
   469 	
   472 	if( !iHandle )
   470 	if( !iHandle )
   473 		{
   471 		{
   474 		return;
   472 		return;
   475 		}
   473 		}
   486 	if( !iHandle )
   484 	if( !iHandle )
   487 		{
   485 		{
   488 		return;
   486 		return;
   489 		}	
   487 		}	
   490 	
   488 	
   491 	Send( EUnregisterHarvestComplete );
   489 	SendReceive( EUnregisterHarvestComplete );
   492 	}
   490 	}
   493 
   491 
   494 // ----------------------------------------------------------------------------------------
   492 // ----------------------------------------------------------------------------------------
   495 // HarvestFile
   493 // HarvestFile
   496 // ----------------------------------------------------------------------------------------
   494 // ----------------------------------------------------------------------------------------
   497 //
   495 //
   498 void RHarvesterClient::HarvestFile( TInt& aService, TIpcArgs& aArgs, TRequestStatus& aStatus )
   496 void RHarvesterClient::HarvestFile( TInt& aService, TIpcArgs& aArgs, TRequestStatus& aStatus, TDesC& aUri )
   499     {
   497     {
   500     // send to server harvesting complete observer
   498     // send to server harvesting complete observer
   501     iHarvesterClientAO->Active();
   499     if( iObserver )
       
   500         {
       
   501         CHarvesterClientAO* harvestNotificationRequest( NULL );
       
   502         TRAPD( err, harvestNotificationRequest = CHarvesterClientAO::NewL(*this, iNotificationQueue ) );
       
   503         if( err )
       
   504             {
       
   505             WRITELOG1( "RHarvesterClient::HarvestFile() - cannot issue harvesting notitification request, error: %d", err );
       
   506             iObserver->HarvestingComplete( const_cast<TDesC&>(aUri), KErrCompletion );  
       
   507             delete harvestNotificationRequest;
       
   508             harvestNotificationRequest = NULL;
       
   509             }
       
   510         else
       
   511             {
       
   512             TRAP( err, iNotificationQueue->AddRequestL( harvestNotificationRequest ) );
       
   513             if( err )
       
   514                 {
       
   515                 iObserver->HarvestingComplete( const_cast<TDesC&>(aUri), KErrCompletion );  
       
   516                 delete harvestNotificationRequest;
       
   517                 harvestNotificationRequest = NULL;            
       
   518                 }
       
   519             else
       
   520                 {
       
   521                 harvestNotificationRequest->SetObserver( iObserver );
       
   522                 harvestNotificationRequest->Active( aUri );
       
   523                 }
       
   524             }
       
   525         }
   502     SendReceive( aService, aArgs, aStatus );
   526     SendReceive( aService, aArgs, aStatus );
   503     }
   527     }
   504 
   528 
   505 // ----------------------------------------------------------------------------------------
   529 // ----------------------------------------------------------------------------------------
   506 // ForceHarvestFile
   530 // ForceHarvestFile
   507 // ----------------------------------------------------------------------------------------
   531 // ----------------------------------------------------------------------------------------
   508 //
   532 //
   509 void RHarvesterClient::ForceHarvestFile( TInt& aService, TIpcArgs& aArgs )
   533 void RHarvesterClient::ForceHarvestFile( TInt& aService, TIpcArgs& aArgs )
   510     {
   534     {
   511     // send to server harvesting complete observer
       
   512     iHarvesterClientAO->Active();
       
   513     SendReceive( aService, aArgs );
   535     SendReceive( aService, aArgs );
   514     }
   536     }
   515 
   537 
   516 // ----------------------------------------------------------------------------------------
   538 // ----------------------------------------------------------------------------------------
   517 // Version
   539 // Version