locationmanager/client/src/rlocationmanager.cpp
branchRCL_3
changeset 63 e538444823de
parent 47 b73252188534
equal deleted inserted replaced
57:2872ae438bf7 63:e538444823de
    31 //
    31 //
    32 TInt LaunchServer()
    32 TInt LaunchServer()
    33     {
    33     {
    34     LOG( "RLocationManager::LaunchServer begin" );
    34     LOG( "RLocationManager::LaunchServer begin" );
    35 
    35 
    36     TFindServer findLocServer( KLocServerName );
    36     // DLL launch
    37     TFullName name;
    37     RProcess server;
       
    38     TInt ret = server.Create( KLocServerFileName, KNullDesC );
    38 
    39 
    39     TInt result = findLocServer.Next( name );
    40     if ( ret != KErrNone )  // Loading failed.
    40     if ( result == KErrNone )
       
    41         {
    41         {
    42         LOG( "StartServer() - Server already running" );
    42         return ret;
    43         
       
    44         // Server already running
       
    45         return KErrNone;
       
    46         }
    43         }
    47     
    44     
    48     RProcess server;
    45     TRequestStatus status( KErrNone );
    49     result = server.Create( KLocServerFileName, KNullDesC );   
    46     server.Rendezvous( status );
    50     if ( result != KErrNone )
    47 
    51         {
    48     if ( status != KRequestPending )
    52         LOG1( "CreateServerProcess() - failed to create server process, error: %d", result );
       
    53         return result;
       
    54         }
       
    55  
       
    56     // Process created successfully
       
    57     TRequestStatus stat( KErrNone );
       
    58     server.Rendezvous( stat );
       
    59     
       
    60     if ( stat != KRequestPending )
       
    61         {
    49         {
    62         LOG( "RLocationManager::LaunchServer Failed" );
    50         LOG( "RLocationManager::LaunchServer Failed" );
    63         server.Kill( 0 );     // Abort startup.
    51         server.Kill( 0 );     // Abort startup.
    64         }
    52         }
    65     else
    53     else
    66         {
    54         {
    67         server.Resume();    // Logon OK - start the server.
    55         server.Resume();    // Logon OK - start the server.
    68         }
    56         }
    69     
    57         
    70     User::WaitForRequest( stat ); // wait for start or death
    58     User::WaitForRequest( status ); // wait for start or death
    71     // we can't use the 'exit reason' if the server panicked as this
    59     // we can't use the 'exit reason' if the server panicked as this
    72     // is the panic 'reason' and may be '0' wehich cannot be distinguished
    60     // is the panic 'reason' and may be '0' wehich cannot be distinguished
    73     // from KErrNone
    61     // from KErrNone
    74     result = ( server.ExitType() == EExitPanic ) ? KErrCommsBreak : stat.Int();
    62     ret = ( server.ExitType() == EExitPanic ) ? KErrCommsBreak : status.Int();
    75     server.Close();
    63     server.Close();
    76     
       
    77     LOG( "RLocationManager::LaunchServer end" );
    64     LOG( "RLocationManager::LaunchServer end" );
    78     
    65     return ret;    
    79     return result;       
       
    80     }
    66     }
    81 
    67 
    82 // --------------------------------------------------------------------------
    68 // --------------------------------------------------------------------------
    83 // RLocationManager::RLocationManager
    69 // RLocationManager::RLocationManager
    84 // C++ Constructor
    70 // C++ Constructor