--- a/memspy/Engine/Include/ClientServer/MemSpyEngineServer.h Wed Sep 15 00:19:18 2010 +0300
+++ b/memspy/Engine/Include/ClientServer/MemSpyEngineServer.h Wed Sep 15 13:53:27 2010 +0300
@@ -23,17 +23,36 @@
// User includes
#include <memspyengineclientinterface.h>
+#include <memspy/engine/memspydevicewideoperations.h>
// Classes referenced
class CMemSpyEngine;
+class CMemSpyDwOperationTracker;
-
+NONSHARABLE_CLASS( CShutdown ) : public CTimer
+ {
+ enum {KMyShutdownDelay=10 * 1000000}; // 10s
+public:
+ inline CShutdown();
+ inline void ConstructL();
+ inline void Start();
+private:
+ void RunL();
+ };
NONSHARABLE_CLASS( CMemSpyEngineServer ) : public CServer2
{
public:
static CMemSpyEngineServer* NewL( CMemSpyEngine& aEngine );
~CMemSpyEngineServer();
+
+ CMemSpyDwOperationTracker* CurrentOperationTracker() const { return iCurrentOperationTracker; }
+ void SetCurrentOperationTracker(CMemSpyDwOperationTracker* aTracker) { iCurrentOperationTracker = aTracker; }
+
+ CMemSpyEngine& Engine() { return iEngine; }
+
+ void AddSession(TBool aCliRequest);
+ void DropSession(TBool aCliRequest);
private:
CMemSpyEngineServer( CMemSpyEngine& aEngine );
@@ -44,6 +63,12 @@
private:
CMemSpyEngine& iEngine;
+ CMemSpyDwOperationTracker* iCurrentOperationTracker;
+
+ TInt iSessionCount;
+ TBool iCliConnected;
+
+ CShutdown iShutdown;
};
@@ -53,7 +78,9 @@
public:
static CMemSpyEngineSession* NewL( CMemSpyEngine& aEngine, const RMessage2& aMessage );
~CMemSpyEngineSession();
-
+
+ void CreateL();
+
private:
CMemSpyEngineSession( CMemSpyEngine& aEngine );
void ConstructL( const RMessage2& aMessage );
@@ -63,17 +90,54 @@
private: // Internal methods
void DoServiceL( const RMessage2& aMessage );
+ void DoAsyncServiceL( const RMessage2& aMessage );
+ void DoUiServiceL( const RMessage2& aMessage );
+ void DoCmdServiceL( const RMessage2& aMessage );
static TInt ValidateFunction( TInt aFunction, TBool aIncludesThreadId, TBool aIncludesThreadName );
void HandleThreadSpecificOpL( TInt aFunction, const TThreadId& aThreadId );
void HandleThreadSpecificOpL( TInt aFunction, const TDesC& aThreadName );
void HandleThreadAgnosticOpL( TInt aFunction, const RMessage2& aMessage );
+ void StartDeviceWideOperationL(CMemSpyDeviceWideOperations::TOperation aOperation, const RMessage2& aMessage);
+
+ inline CMemSpyEngineServer& Server() const { return *static_cast<CMemSpyEngineServer*>(const_cast<CServer2*>(CSession2::Server())); }
private:
CMemSpyEngine& iEngine;
HBufC* iClientThreadName;
TUint32 iClientThreadId;
+ TBool iIsCliRequest;
};
+/**
+ * CMemSpyDwOperationTracker
+ * Tracks device wide operation progress and calls iOperationMessage.Complete upon completion.
+ */
+NONSHARABLE_CLASS( CMemSpyDwOperationTracker ) : public MMemSpyDeviceWideOperationsObserver
+ {
+public:
+ static CMemSpyDwOperationTracker* NewL(CMemSpyDeviceWideOperations::TOperation aOperation,
+ const RMessage2& aOperationMessage,
+ CMemSpyEngineServer& aServer);
+ ~CMemSpyDwOperationTracker();
+
+ void AddNotificationL(const RMessage2& aMessage);
+
+ void Cancel();
+
+public: // From MMemSpyDeviceWideOperationsObserver
+ void HandleDeviceWideOperationEvent(TEvent aEvent, TInt aParam1, const TDesC& aParam2);
+
+private:
+ CMemSpyDwOperationTracker(const RMessage2& aOperationMessage, CMemSpyEngineServer& aServer);
+ void ConstructL(CMemSpyDeviceWideOperations::TOperation aOperation);
+
+private:
+ RMessage2 iOperationMessage;
+ CMemSpyEngineServer& iServer;
+ CArrayFixFlat<RMessage2>* iPendingNotifications;
+ CMemSpyDeviceWideOperations* iOperation;
+ TInt iProgress;
+ };
#endif