diff -r 000000000000 -r 62f9d29f7211 webservices/wsconnection/inc/senservicedispatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsconnection/inc/senservicedispatcher.h Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,183 @@ +/* +* Copyright (c) 2002-2005 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: Custom plug-in implementations offer their own API documentation +* where detailed characteristics about how methods declared in this +* class are implemented. +* +*/ + + + + + + + + +#ifndef SEN_SERVICE_DISPATCHER_H +#define SEN_SERVICE_DISPATCHER_H + +#include +#include +#include +#include "senlogger.h" +#include "sendebug.h" + +typedef RSenPointerMap RTransactionsMap; + +// FORWARD DECLARATIONS +class CSenConnectionChunk; +class CSenAsyncOperation; +class CSenServiceConnectionImpl; + +struct TMessage +{ + CSenConnectionChunk* iSenConnectionChunk; // Not Owned + CSenAsyncOperation* iSenAsyncOperation; // Not Owned +}; + +struct TThreadMessage +{ + TMessage iMessage; + TInt iVrtalTrnsnID; +}; + +#ifdef EKA2 +NONSHARABLE_CLASS(CSenServiceDispatcher) : public CBase +#else +class CSenServiceDispatcher : public CBase +#endif + { + private: + protected: + public: + + // Constructors and destructor: + static CSenServiceDispatcher* NewL( RSenServiceConnection& aConnection, + TInt aConnectionID); + + static CSenServiceDispatcher* NewLC( RSenServiceConnection& aConnection, + TInt aConnectionID); + + + static TInt DispatcherThreadL(CSenServiceDispatcher* aThis); + + static TInt ExecuteL(CSenServiceDispatcher* aThis); + + TInt GetDispactherThreadId(); + + TInt AddToTheQueue(TThreadMessage aThreadMessage); + + TBool RemoveFromQueue(TInt aTransactionID); + + TInt AddToTheTransMap(TInt* pVrtlaTxnId,TInt* pActlTxnId); + + TInt RemoveFromTransMap(TInt* pVrtlaTxnId); + + TInt UpdateTransMap(TInt* pVrtlaTxnId,TInt* pActlTxnId); + + TInt GetActualTransactionID(TInt* pVrtlaTxnId); + + TInt GetVirtualTransactionID(TInt* pActlTxnId); + + void SetOwnerThreadId(TInt aOwnerThreadID); + + void ResetQueue(); + + TMessage GetMessageFromQueue(TInt aTransactionID); + + virtual ~CSenServiceDispatcher(); + + private: + + /** + * C++ default constructor. + */ + CSenServiceDispatcher(RSenServiceConnection& aConnection); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(TInt aConnectionID); + + RTransactionsMap& TransactionMap(); + + void OpenDispatcherLogL(); + + void CloseDispatcherLogL(); + + private: + + RThread iDispatcherThread; + + //Message queue to dispacth messages in FIFO order. + RArray iMessageQueue; + TInt iMessagesQueueCounter; + + //Map of virtual and actual transaction ID's. + RTransactionsMap* ipTransactionsMap; + + //Flag for dispatching messages. Stops dispatching messages + //when set to FALSE. + TBool iDispatchMessages; + + //Synchronizer critical section. Used to lock while dispatching + //messages. + RCriticalSection iCsSynchronizer; + + //Crtitical senction for message queue. + RCriticalSection iCsMessageQueue; + + //Crtitical senction for transaction map. + RCriticalSection iCsTransctnsMap; + + TThreadId iOwnerThreadId; + RSenServiceConnection& iConnection; // not owned + TInt iConnectionID; + + }; + +#ifdef EKA2 +NONSHARABLE_CLASS(CSenUnderTakerWaiter) : public CActive +#else +class CSenUnderTakerWaiter : public CActive +#endif + { + public: + // Constructors and destructor + static CSenUnderTakerWaiter* NewL(CSenServiceConnectionImpl* aSenServiceConnectionImpl, + TInt aDispatcherThreadID ); + static CSenUnderTakerWaiter* NewLC(CSenServiceConnectionImpl* aSenServiceConnectionImpl, + TInt aDispatcherThreadID); + + void StartWaiter(); + void StopWaiter(); + + ~CSenUnderTakerWaiter(); + + private: + CSenUnderTakerWaiter(); + void ConstructL(CSenServiceConnectionImpl* aSenServiceConnectionImpl, + TInt iDispatcherThreadID ); + void RunL(); + void DoCancel(); + private: // Data + CSenServiceConnectionImpl* iSenServiceConnectionImpl; // not owned + RUndertaker iUnderTaker; + TInt iDyingThreadNumber ; + TInt iDispatcherThreadID ; + }; + +#endif //SEN_SERVICE_DISPATCHER_H + +// End of File