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