diff -r 07b41fa8d1dd -r ca8a1b6995f6 memspy/Engine/Include/ClientServer/MemSpyEngineServer.h --- a/memspy/Engine/Include/ClientServer/MemSpyEngineServer.h Thu Aug 19 11:25:43 2010 +0300 +++ b/memspy/Engine/Include/ClientServer/MemSpyEngineServer.h Tue Aug 31 16:45:49 2010 +0300 @@ -23,17 +23,36 @@ // User includes #include +#include // 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(const_cast(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* iPendingNotifications; + CMemSpyDeviceWideOperations* iOperation; + TInt iProgress; + }; #endif