loggingservices/eventlogger/LogServ/inc/LogServOperationQueue.h
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 // Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef __LOGSERVOPERATIONQUEUE_H__
       
    17 #define __LOGSERVOPERATIONQUEUE_H__
       
    18 
       
    19 #include <e32base.h>
       
    20 #include "LogServDefs.h"
       
    21 #include "LogServShared.h"
       
    22 #include "LogServOperationManager.h"
       
    23 
       
    24 // Classes referenced
       
    25 class MLogServTaskInterface;
       
    26 class CLogServOperationBase;
       
    27 
       
    28 /**
       
    29 Implements the MLogServOperationManager interface.
       
    30 The class maintains two queues of operations:
       
    31     - "pending operations" queue. All pending operations are kept in here for execution;
       
    32     - "completed operations" queue. If particular operation returns results for the client, that
       
    33                 operation will be moved to here after the execution;
       
    34 CLogServOperationQueue implements MLogServOperationManager and dereives from CActive.
       
    35 Every time when a new operation is added to the queue, CLogServOperationQueue object completes itsef
       
    36 and schedules itself for an execution. When the active scheduler calls the RunL() method of the class,
       
    37 an operation will be picked up from the pending queue and started.                
       
    38 
       
    39 @see MLogServOperationManager
       
    40 @see MLogServTaskInterface
       
    41 @see CLogServOperationBase
       
    42  
       
    43 @internalComponent
       
    44 */
       
    45 class CLogServOperationQueue : public CActive, public MLogServOperationManager
       
    46 	{
       
    47 public:
       
    48 	static CLogServOperationQueue* NewL(MLogServTaskInterface& aTaskInterface, TInt aPriority);
       
    49 	~CLogServOperationQueue();
       
    50 
       
    51 private:
       
    52 	CLogServOperationQueue(MLogServTaskInterface& aTaskInterface, TInt aPriority);
       
    53 
       
    54 private: // From MLogServOperationManager
       
    55 	void OMOperationQueueAdd(CLogServOperationBase& aOperation);
       
    56 	void OMOperationQueueRemove(CLogServOperationBase& aOperation);
       
    57 	void OMGetResultL(TLogOperationId aId, TLogServSessionId aSessionId, const RMessage2& aMessageToWriteTo);
       
    58 	void OMCancel(TLogOperationId aId, TLogServSessionId aSessionId, TBool aCompleteRequest);
       
    59 	void OMCancel(TLogServSessionId aSessionId, TBool aCompleteRequest);
       
    60 
       
    61 private: // From CActive
       
    62 	void RunL();
       
    63 	void DoCancel();
       
    64 	TInt RunError(TInt aError);
       
    65 
       
    66 private: // Internal methods
       
    67 	void CompleteRequest(TInt aCompletionCode = KErrNone);
       
    68 	void StartNextOpL();		
       
    69 	void DeleteFromQueue(TSglQue<CLogServOperationBase>& aQueue, TLogOperationId aOperationId, TLogServSessionId aSessionId);
       
    70 	TBool QueueContainsOperation(TSglQue<CLogServOperationBase>& aQueue, TLogOperationId aOperationId, TLogServSessionId aSessionId);
       
    71 	CLogServOperationBase* FindOperation(TSglQue<CLogServOperationBase>& aQueue, TLogOperationId aOperationId, TLogServSessionId aSessionId);
       
    72 
       
    73 private: // Member data
       
    74 
       
    75 	MLogServTaskInterface& iTaskInterface;
       
    76 	CLogServOperationBase* iCurrentOperation;
       
    77 	TSglQue<CLogServOperationBase> iQueuePending;
       
    78 	TSglQue<CLogServOperationBase> iQueueCompleted;
       
    79 	};
       
    80 
       
    81 #endif