sensorservices/sensorserver/src/server/sensrvserver.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sensorservices/sensorserver/src/server/sensrvserver.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Sensor server main class
+*
+*/
+
+#include <ecom/ecom.h>
+#include "sensrvdefines.h"
+#include "sensrvserver.h"
+#include "sensrvsession.h"
+#include "sensrvproxymanager.h"
+#include "sensrvtrace.h"
+#include "sensrvchannelinfo.h"
+
+
+// -----------------------------------------------------------------------------
+// CSensrvServer::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSensrvServer* CSensrvServer::NewL()
+    {
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewL()" ) ) );
+
+    CSensrvServer* self = CSensrvServer::NewLC();
+    CleanupStack::Pop( self );
+
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewL - return 0x%x" ), self ) );
+
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSensrvServer::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CSensrvServer* CSensrvServer::NewLC()
+    {
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewLC()" ) ) );
+
+    CSensrvServer* self = new( ELeave ) CSensrvServer(EUnsharableSessions);
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewLC - return 0x%x" ), self ) );
+
+    return self;
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CSensrvServer::CSensrvServer
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSensrvServer::CSensrvServer( const TServerType aType  )
+    : CPolicyServer( KSensrvCActivePriority, KSensrvPolicy, aType )
+    {
+    // Nothing to do
+    }
+
+// -----------------------------------------------------------------------------
+// CSensrvServer::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CSensrvServer::ConstructL()
+    {
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::ConstructL()" ) ) );
+ 
+    // Add server to active scheduler before doing anything else so there won't be synchronization problems with multiple clients.
+    StartL( KSensrvProcessName );
+
+    // Create proxy manager
+    iProxyManager = CSensrvProxyManager::NewL(*this);
+
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::ConstructL - return" ) ) );
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSensrvServer::~CSensrvServer()
+    {
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::~CSensrvServer()" ) ) );
+
+    // Close all open sessions
+    CSensrvSession* session=NULL;
+    iSessionIter.SetToFirst();
+    while((session = static_cast<CSensrvSession*>(iSessionIter++)) != NULL)
+    {
+        delete session;
+    }
+
+    delete iProxyManager;
+
+    // Signal final closure of ecom session for server main thread
+    REComSession::FinalClose();
+
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::~CSensrvServer - return") ) );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Notifies all client sessions that there is a change in available channels
+// Sessions will notify clients if they are interested.
+// ---------------------------------------------------------------------------
+//
+void CSensrvServer::NotifyChannelChange(const TSensrvResourceChannelInfo& aChangedChannel,
+                                        TSensrvChannelChangeType aChangeType )
+    {
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NotifyChannelChange(aChangedChannel.iChannelId: %d, aChangeType: %d)"), aChangedChannel.iChannelId, aChangeType ) );
+
+    // Iterate through all sessions and notify them
+    CSensrvSession* session=NULL;
+    iSessionIter.SetToFirst();
+    while((session = static_cast<CSensrvSession*>(iSessionIter++)) != NULL)
+    {
+        session->NotifyChannelChange(aChangedChannel, aChangeType);
+    }
+    
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NotifyChannelChange - return" )) );
+    }
+        
+// -----------------------------------------------------------------------------
+// CSensrvServer::NewSessionL
+// Creates a new CSession2
+// -----------------------------------------------------------------------------
+//
+CSession2* CSensrvServer::NewSessionL( const TVersion& aVersion,
+                                       const RMessage2& aMessage ) const
+    {
+#if defined(_DEBUG) && defined(COMPONENT_TRACE_FLAG)
+    TVersionName name = aVersion.Name();
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewSessionL(%S)" ), &name) );
+#endif
+
+    if ( !User::QueryVersionSupported( TVersion( KSensrvVersionMajor, 
+                                                 KSensrvVersionMinor, 
+                                                 KSensrvVersionBuild ), 
+                                                 aVersion ) )
+        {
+        User::Leave( KErrNotSupported );
+        }
+            
+    CSession2* session = CSensrvSession::NewL( *const_cast<CSensrvServer*>(this), 
+                                               *iProxyManager,
+                                               aMessage.SecureId() );
+
+    COMPONENT_TRACE( ( _L( "Sensor Server - CSensrvServer::NewSessionL - return 0x%x" ), session ) );
+
+    return( session );
+    }
+
+
+
+