sensorservices/sensorserver/src/server/sensrvserver.cpp
changeset 0 4e1aa6a622a0
equal deleted inserted replaced
-1:000000000000 0:4e1aa6a622a0
       
     1 /*
       
     2 * Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Sensor server main class
       
    15 *
       
    16 */
       
    17 
       
    18 #include <ecom/ecom.h>
       
    19 #include "sensrvdefines.h"
       
    20 #include "sensrvserver.h"
       
    21 #include "sensrvsession.h"
       
    22 #include "sensrvproxymanager.h"
       
    23 #include "sensrvtrace.h"
       
    24 #include "sensrvchannelinfo.h"
       
    25 
       
    26 
       
    27 // -----------------------------------------------------------------------------
       
    28 // CSensrvServer::NewL
       
    29 // Two-phased constructor.
       
    30 // -----------------------------------------------------------------------------
       
    31 //
       
    32 CSensrvServer* CSensrvServer::NewL()
       
    33     {
       
    34     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewL()" ) ) );
       
    35 
       
    36     CSensrvServer* self = CSensrvServer::NewLC();
       
    37     CleanupStack::Pop( self );
       
    38 
       
    39     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewL - return 0x%x" ), self ) );
       
    40 
       
    41     return self;
       
    42     }
       
    43 
       
    44 // -----------------------------------------------------------------------------
       
    45 // CSensrvServer::NewLC
       
    46 // Two-phased constructor.
       
    47 // -----------------------------------------------------------------------------
       
    48 //
       
    49 CSensrvServer* CSensrvServer::NewLC()
       
    50     {
       
    51     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewLC()" ) ) );
       
    52 
       
    53     CSensrvServer* self = new( ELeave ) CSensrvServer(EUnsharableSessions);
       
    54     
       
    55     CleanupStack::PushL( self );
       
    56     self->ConstructL();
       
    57 
       
    58     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewLC - return 0x%x" ), self ) );
       
    59 
       
    60     return self;
       
    61     }
       
    62     
       
    63 
       
    64 // -----------------------------------------------------------------------------
       
    65 // CSensrvServer::CSensrvServer
       
    66 // C++ default constructor can NOT contain any code, that
       
    67 // might leave.
       
    68 // -----------------------------------------------------------------------------
       
    69 //
       
    70 CSensrvServer::CSensrvServer( const TServerType aType  )
       
    71     : CPolicyServer( KSensrvCActivePriority, KSensrvPolicy, aType )
       
    72     {
       
    73     // Nothing to do
       
    74     }
       
    75 
       
    76 // -----------------------------------------------------------------------------
       
    77 // CSensrvServer::ConstructL
       
    78 // Symbian 2nd phase constructor can leave.
       
    79 // -----------------------------------------------------------------------------
       
    80 //
       
    81 void CSensrvServer::ConstructL()
       
    82     {
       
    83     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::ConstructL()" ) ) );
       
    84  
       
    85     // Add server to active scheduler before doing anything else so there won't be synchronization problems with multiple clients.
       
    86     StartL( KSensrvProcessName );
       
    87 
       
    88     // Create proxy manager
       
    89     iProxyManager = CSensrvProxyManager::NewL(*this);
       
    90 
       
    91     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::ConstructL - return" ) ) );
       
    92     }
       
    93 
       
    94 // -----------------------------------------------------------------------------
       
    95 // Destructor
       
    96 // -----------------------------------------------------------------------------
       
    97 //
       
    98 CSensrvServer::~CSensrvServer()
       
    99     {
       
   100     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::~CSensrvServer()" ) ) );
       
   101 
       
   102     // Close all open sessions
       
   103     CSensrvSession* session=NULL;
       
   104     iSessionIter.SetToFirst();
       
   105     while((session = static_cast<CSensrvSession*>(iSessionIter++)) != NULL)
       
   106     {
       
   107         delete session;
       
   108     }
       
   109 
       
   110     delete iProxyManager;
       
   111 
       
   112     // Signal final closure of ecom session for server main thread
       
   113     REComSession::FinalClose();
       
   114 
       
   115     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::~CSensrvServer - return") ) );
       
   116     }
       
   117 
       
   118 
       
   119 // ---------------------------------------------------------------------------
       
   120 // Notifies all client sessions that there is a change in available channels
       
   121 // Sessions will notify clients if they are interested.
       
   122 // ---------------------------------------------------------------------------
       
   123 //
       
   124 void CSensrvServer::NotifyChannelChange(const TSensrvResourceChannelInfo& aChangedChannel,
       
   125                                         TSensrvChannelChangeType aChangeType )
       
   126     {
       
   127     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NotifyChannelChange(aChangedChannel.iChannelId: %d, aChangeType: %d)"), aChangedChannel.iChannelId, aChangeType ) );
       
   128 
       
   129     // Iterate through all sessions and notify them
       
   130     CSensrvSession* session=NULL;
       
   131     iSessionIter.SetToFirst();
       
   132     while((session = static_cast<CSensrvSession*>(iSessionIter++)) != NULL)
       
   133     {
       
   134         session->NotifyChannelChange(aChangedChannel, aChangeType);
       
   135     }
       
   136     
       
   137     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NotifyChannelChange - return" )) );
       
   138     }
       
   139         
       
   140 // -----------------------------------------------------------------------------
       
   141 // CSensrvServer::NewSessionL
       
   142 // Creates a new CSession2
       
   143 // -----------------------------------------------------------------------------
       
   144 //
       
   145 CSession2* CSensrvServer::NewSessionL( const TVersion& aVersion,
       
   146                                        const RMessage2& aMessage ) const
       
   147     {
       
   148 #if defined(_DEBUG) && defined(COMPONENT_TRACE_FLAG)
       
   149     TVersionName name = aVersion.Name();
       
   150     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewSessionL(%S)" ), &name) );
       
   151 #endif
       
   152 
       
   153     if ( !User::QueryVersionSupported( TVersion( KSensrvVersionMajor, 
       
   154                                                  KSensrvVersionMinor, 
       
   155                                                  KSensrvVersionBuild ), 
       
   156                                                  aVersion ) )
       
   157         {
       
   158         User::Leave( KErrNotSupported );
       
   159         }
       
   160             
       
   161     CSession2* session = CSensrvSession::NewL( *const_cast<CSensrvServer*>(this), 
       
   162                                                *iProxyManager,
       
   163                                                aMessage.SecureId() );
       
   164 
       
   165     COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewSessionL - return 0x%x" ), session ) );
       
   166 
       
   167     return( session );
       
   168     }
       
   169 
       
   170 
       
   171 
       
   172