taskswitcher/contextengine/hgfswserver/server/src/hgfswsession.cpp
changeset 2 08c6ee43b396
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/taskswitcher/contextengine/hgfswserver/server/src/hgfswsession.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -0,0 +1,159 @@
+/*
+ * ===========================================================================
+ *  Name        : hgfswsession.cpp
+ *  Part of     : Huriganes / Fast Swap Server
+ *  Description : session implementation
+ *  Version     : %version: sa1spcx1#8 %
+ *
+ *  Copyright © 2008 Nokia Corporation.
+ *  This material, including documentation and any related 
+ *  computer programs, is protected by copyright controlled by 
+ *  Nokia Corporation. All rights are reserved. Copying, 
+ *  including reproducing, storing, adapting or translating, any 
+ *  or all of this material requires the prior written consent of 
+ *  Nokia Corporation. This material also contains confidential 
+ *  information which may not be disclosed to others without the 
+ *  prior written consent of Nokia Corporation.
+ * ===========================================================================
+ */
+
+#include "hgfswsession.h"
+
+// --------------------------------------------------------------------------
+// CHgFswSession::CHgFswSession
+// --------------------------------------------------------------------------
+//
+CHgFswSession::CHgFswSession()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::Server
+// --------------------------------------------------------------------------
+//
+CHgFswServer& CHgFswSession::Server()
+    {
+    return *static_cast<CHgFswServer*>(
+        const_cast<CServer2*>( CSession2::Server() ) );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::CreateL
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::CreateL() // codescanner::LFunctionCantLeave (virtual)
+    {
+    Server().AddSession();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::~CHgFswSession
+// --------------------------------------------------------------------------
+//
+CHgFswSession::~CHgFswSession()
+    {
+    CompleteSubscribe( KErrCancel );
+    iSubscribeRequests.Close();
+    Server().DropSession();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::CompleteSubscribe
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::CompleteSubscribe( TInt aError )
+    {
+    for ( TInt i = 0, ie = iSubscribeRequests.Count(); i != ie; ++i )
+        {
+        iSubscribeRequests[i].Complete( aError );
+        }
+    iSubscribeRequests.Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::ServiceL
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::ServiceL( const RMessage2& aMessage )
+    {
+    if ( !aMessage.HasCapability( ECapabilityLocalServices ) )
+        {
+        aMessage.Panic( KHgFswPanicName, EPanicAccessDenied );
+        return;
+        }
+
+    switch ( aMessage.Function() )
+        {
+    case EHgFswSubscribe:
+        iSubscribeRequests.AppendL( aMessage );
+        break;
+
+    case EHgFswCancel:
+        CompleteSubscribe( KErrCancel );
+        aMessage.Complete( KErrNone );
+        break;
+
+    case EHgFswGetBufferSize:
+        Server().SerializeAndGetBufferSizeL( aMessage );
+        break;
+
+    case EHgFswGetBuffer:
+        Server().GetBufferL( aMessage );
+        break;
+
+    case EHgFswCloseApp:
+        Server().CloseAppL( aMessage.Int0() );
+        aMessage.Complete( KErrNone );
+        break;
+
+    case EHgFswSwitchToApp:
+        Server().SwitchToAppL( aMessage.Int0() );
+        aMessage.Complete( KErrNone );
+        break;
+        
+    case EHgFswForegroundAppUid:
+        Server().ForegroundAppUidL( aMessage );
+        aMessage.Complete( KErrNone );
+        break;
+
+    default:
+        aMessage.Panic( KHgFswPanicName, EPanicIllegalFunction );
+        break;
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::ServiceError
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::ServiceError( const RMessage2& aMessage,
+        TInt aError )
+    {
+    if ( aError == KErrBadDescriptor )
+        {
+        aMessage.Panic( KHgFswPanicName, EPanicBadDescriptor );
+        }
+    CSession2::ServiceError( aMessage, aError );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::FswDataChanged
+// called by server when notification is received from engine
+// --------------------------------------------------------------------------
+//
+void CHgFswSession::FswDataChanged()
+    {
+    CompleteSubscribe( KErrNone );
+    }
+
+// --------------------------------------------------------------------------
+// CHgFswSession::IsListening
+// --------------------------------------------------------------------------
+//
+TBool CHgFswSession::IsListening()
+    {
+    return iSubscribeRequests.Count() > 0;
+    }
+
+
+// end of file