imagehandlingutilities/thumbnailmanager/thumbnailserver/inc/thumbnailtask.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:35:30 +0200
changeset 14 2edacbf5d3f9
parent 0 2014ca87e772
child 11 dea39715fc05
permissions -rw-r--r--
Revision: 201007 Kit: 201011

/*
* 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:  Base class for thumbnail server tasks
 *
*/


#ifndef THUMBNAILTASK_H
#define THUMBNAILTASK_H

#include "thumbnailmanager.h"    // TThumbnailRequestId
#include "thumbnailmanagerconstants.h" // TThumbnailServerRequestId


class CThumbnailTaskProcessor;
class CThumbnailServerSession;

/**
 *  Base class for thumbnail server tasks.
 *
 *  @since S60 v5.0
 */
class CThumbnailTask: public CActive
    {
public:
    /**
     * Task state.
     * @since S60 v5.0
     */
    enum TTaskState
        {
        /**
         * This task is waiting to be run.
         */
        EIdle, 

        /**
         * This task is currently running.
         */
        ERunning, 

        /**
         * This task has completed and can be destroyed.
         */
        EComplete
    };

public:

    /**
     * C++ default constructor
     *
     * @since S60 v5.0
     * @param aProcessor Processor object for running tasks.
     * @param aPriority Priority of the task.
     * @return New CThumbnailTask instance.
     */
    CThumbnailTask( CThumbnailTaskProcessor& aProcessor, TInt aPriority );

    /**
     * Destructor
     *
     * @since S60 v5.0
     */
    virtual ~CThumbnailTask();

public:

    /**
     * Returns priority of task.
     *
     * @since S60 v5.0
     * @return Priority of the task.
     */
    TInt Priority()const;

    /**
     * Returns state of task.
     *
     * @since S60 v5.0
     * @return State.
     */
    TTaskState State()const;

    /**
     * SetMessageData
     *
     * @since S60 v5.0
     * @param aRequestId Request ID.
     * @param aMessage Message.
     */
    virtual void SetMessageData( const TThumbnailServerRequestId& aRequestId,
        const RMessage2& aMessage );
    
    /**
     * SetMessageData if message is not needed to complete
     *
     * @since S60 v5.0
     * @param aRequestId Request ID.
     */
     virtual void SetMessageData( const TThumbnailServerRequestId& aRequestId );

    /**
     * Resets message data.
     *
     * @since S60 v5.0
     */
    virtual void ResetMessageData();

    /**
     * Cancels message.
     *
     * @since S60 v5.0
     */
    virtual void CancelMessage();

    /**
     * Returns ID of specific task.
     *
     * @since S60 v5.0
     * @return Request ID.
     */
    virtual TThumbnailServerRequestId RequestId()const;

    /**
     * Changes priority of the task.
     *
     * @since S60 v5.0
     * @param aNewPriority New priority.
     */
    virtual void ChangeTaskPriority( TInt aNewPriority );

    /**
     * StartL
     *
     * @since S60 v5.0
     */
    virtual void StartL();

    /**
     * Implements cancellation of an outstanding request.
     *
     * @since S60 v5.0
     */
    virtual void DoCancel();    
    
    /**
     * StartError
     *
     * @since S60 v5.0
     * @param aError Error code.
     */
    virtual void StartError( TInt aError );

    /**
     * Complete
     *
     * @since S60 v5.0
     * @param aReason Status code.
     */
    virtual void Complete( TInt aReason );
    
    /**
     * Continue without deleting task
     *
     * @since S60 v5.0
     */
    virtual void Continue();
    
    /**
     * Checks if client thread is still alive and RMessage2 handle valid.
     *
     * @since S60 v5.0
     * @param aGetThread Need to get thread first.
     */
    TBool ClientThreadAlive(const TBool aGetThread = ETrue);    

protected:
    // data

    /**
     * Processor.
     */
    CThumbnailTaskProcessor& iProcessor;

    /**
     * Priority of the task.
     */
    TInt iPriority;

    /**
     * State of the task.
     */
    TTaskState iState;

    /**
     * Id of the request.
     */
    TThumbnailServerRequestId iRequestId;

    /**
     * Message.
     */
    RMessage2 iMessage;
    
    RThread iClientThread;
};

#endif // THUMBNAILTASK_H