upnpsharing/upnpcontentserver/inc/upnpcontentserver.h
author samhuttu
Mon, 01 Nov 2010 12:37:49 +0200
branchnew development branch with rendering state machine and other goodies
changeset 38 5360b7ddc251
parent 0 7f85d04be362
permissions -rw-r--r--
New development branch with e.g. rendering state machine and a simple Qt example application using it.

/*
* Copyright (c) 2006-2007 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:      Header for upnpcontentserver 
*
*/






#ifndef __UPNPCONTENTSERVER_H__
#define __UPNPCONTENTSERVER_H__

// INCLUDES
#include <e32base.h>
#include "upnpconnectionmonitorobserver.h"
#include "upnpconnectionmonitor.h"
#include "upnpcontentserverhandler.h"
#include "upnpcontentserversession.h"

// FORWARD DECLARATIONS
class CUPnPPeriodic;

// Server shutdown delay in microseconds (2.5s)
const TInt KShutdownTimeout = 2500000;

// FORWARD DECLARATIONS
class CUpnpContentServerSession;

/**
*  A server class to initialize server.
*
*  @since S60 3.1
*/
class CUpnpContentServer : public CPolicyServer,
                           public MUPnPConnectionMonitorObserver
    {
public:
    /**
    * A Method to initialize the CleanupStack and the ActiveScheduler.
    * Creates an instance of CUpnpContentServer.
    * @param None.
    * @return KErrNone, if successful, otherwise one of the other system-wide
    *         error codes.
    */
    static TInt LaunchServerL();

    /**
    * 2-phased constructor.
    */
    static CUpnpContentServer* NewL();

    /**
    * C++ destructor.
    */
    virtual ~CUpnpContentServer();

    /**
     * Returns pointer CUpnpContentserverHandler instanse
     * @since S60 3.1
     */
    CUpnpContentServerHandler* Handler() const;
 
    /**
     * Decrements session counter
     * @since S60 3.1
     */
    void RemoveSession();

    /**
     * Decrements session counter
     * @since S60 3.1
     */
    void AddSession();

    /**
     * Indicates if server can be stopped
     * @since S60 3.1
     * @ return ETrue if there is no other session open
     */
    TBool CanStop() const;

    /**
     * Stop the server with delay
     * @since S60 3.1
     */
    void Stop();

    /**
     * Perform the shutdown of the server
     * @return KErrNone
     */
    static TInt Shutdown( TAny* aPtr );

    /**
     * Start the connection monitor if not yet started
     * Register for connection lost events
     * @since S60 3.1
     */
    TInt RequestConnectionLostL( const TInt aIapId );

    /**
     * Stop the connection monitor if only session
     * unregister the session from connection monitoring
     * @since S60 3.1
     */
    void CancelConnectionLostL();

public:
    /**
    * From CServer2, creates a new session.
    */
    CSession2* NewSessionL( const TVersion& aVersion, 
                            const RMessage2& aMessage ) const;

protected:
    /**
     * From CServer2, handle possible leaves
     */
    TInt RunError( TInt aError );

private:
    /**
    * C++ constructor.
    */
    CUpnpContentServer();

    /**
    * 2nd phase constructor.
    */
    void ConstructL( );

private:
    /**
     * From MUPnPConnectionMonitorObserver
     * Inform all sessions that connection has been lost
     * @since S60 3.1
     */
    void ConnectionLost( TBool aUserOriented );


private:

    /** 
     * Server has an object container index which 
     * creates an object container for each session
     * owned
     */
    CObjectConIx* iContainerIndex;

    /**
     * Pointer to handler
     * owned
     */
    CUpnpContentServerHandler* iHandler;

    /**
     * Session count
     */
    TInt iSessionCount;

    /**
     * Connection monitor handle
     */
    CUPnPConnectionMonitor* iConMon;

    /**
     * Id of the active IAP
     */
    TInt iActiveIapId;

    /**
     * Delayer for the server shutdown
     */
    CUPnPPeriodic* iIdle;

    };


#endif // __UPNPCONTENTSERVER_H__