--- /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 <flogger.h>
+#include <e32property.h>
+#include <e32std.h>
+#include "senlogger.h"
+#include "sendebug.h"
+
+typedef RSenPointerMap<TInt, TInt> 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<TThreadMessage> 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