taskswitcher/contextengine/hgfswserver/server/src/hgfswsession.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 18 Jan 2010 20:10:36 +0200
changeset 2 08c6ee43b396
permissions -rw-r--r--
Revision: 201001 Kit: 201003

/*
 * ===========================================================================
 *  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