21 // System includes |
21 // System includes |
22 #include <e32base.h> |
22 #include <e32base.h> |
23 |
23 |
24 // User includes |
24 // User includes |
25 #include <memspyengineclientinterface.h> |
25 #include <memspyengineclientinterface.h> |
26 #include <memspy/engine/memspydevicewideoperations.h> |
|
27 |
26 |
28 // Classes referenced |
27 // Classes referenced |
29 class CMemSpyEngine; |
28 class CMemSpyEngine; |
30 class CMemSpyDwOperationTracker; |
|
31 |
29 |
32 NONSHARABLE_CLASS( CShutdown ) : public CTimer |
30 |
33 { |
|
34 enum {KMyShutdownDelay=10 * 1000000}; // 10s |
|
35 public: |
|
36 inline CShutdown(); |
|
37 inline void ConstructL(); |
|
38 inline void Start(); |
|
39 private: |
|
40 void RunL(); |
|
41 }; |
|
42 |
31 |
43 NONSHARABLE_CLASS( CMemSpyEngineServer ) : public CServer2 |
32 NONSHARABLE_CLASS( CMemSpyEngineServer ) : public CServer2 |
44 { |
33 { |
45 public: |
34 public: |
46 static CMemSpyEngineServer* NewL( CMemSpyEngine& aEngine ); |
35 static CMemSpyEngineServer* NewL( CMemSpyEngine& aEngine ); |
47 ~CMemSpyEngineServer(); |
36 ~CMemSpyEngineServer(); |
48 |
|
49 CMemSpyDwOperationTracker* CurrentOperationTracker() const { return iCurrentOperationTracker; } |
|
50 void SetCurrentOperationTracker(CMemSpyDwOperationTracker* aTracker) { iCurrentOperationTracker = aTracker; } |
|
51 |
|
52 CMemSpyEngine& Engine() { return iEngine; } |
|
53 |
|
54 void AddSession(TBool aCliRequest); |
|
55 void DropSession(TBool aCliRequest); |
|
56 |
37 |
57 private: |
38 private: |
58 CMemSpyEngineServer( CMemSpyEngine& aEngine ); |
39 CMemSpyEngineServer( CMemSpyEngine& aEngine ); |
59 void ConstructL(); |
40 void ConstructL(); |
60 |
41 |
61 protected: // From CServer2 |
42 protected: // From CServer2 |
62 CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; |
43 CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; |
63 |
44 |
64 private: |
45 private: |
65 CMemSpyEngine& iEngine; |
46 CMemSpyEngine& iEngine; |
66 CMemSpyDwOperationTracker* iCurrentOperationTracker; |
|
67 |
|
68 TInt iSessionCount; |
|
69 TBool iCliConnected; |
|
70 |
|
71 CShutdown iShutdown; |
|
72 }; |
47 }; |
73 |
48 |
74 |
49 |
75 |
50 |
76 NONSHARABLE_CLASS( CMemSpyEngineSession ) : public CSession2 |
51 NONSHARABLE_CLASS( CMemSpyEngineSession ) : public CSession2 |
77 { |
52 { |
78 public: |
53 public: |
79 static CMemSpyEngineSession* NewL( CMemSpyEngine& aEngine, const RMessage2& aMessage ); |
54 static CMemSpyEngineSession* NewL( CMemSpyEngine& aEngine, const RMessage2& aMessage ); |
80 ~CMemSpyEngineSession(); |
55 ~CMemSpyEngineSession(); |
81 |
56 |
82 void CreateL(); |
|
83 |
|
84 private: |
57 private: |
85 CMemSpyEngineSession( CMemSpyEngine& aEngine ); |
58 CMemSpyEngineSession( CMemSpyEngine& aEngine ); |
86 void ConstructL( const RMessage2& aMessage ); |
59 void ConstructL( const RMessage2& aMessage ); |
87 |
60 |
88 private: // From CSession2 |
61 private: // From CSession2 |
89 void ServiceL( const RMessage2& aMessage ); |
62 void ServiceL( const RMessage2& aMessage ); |
90 |
63 |
91 private: // Internal methods |
64 private: // Internal methods |
92 void DoServiceL( const RMessage2& aMessage ); |
65 void DoServiceL( const RMessage2& aMessage ); |
93 void DoAsyncServiceL( const RMessage2& aMessage ); |
|
94 void DoUiServiceL( const RMessage2& aMessage ); |
|
95 void DoCmdServiceL( const RMessage2& aMessage ); |
|
96 static TInt ValidateFunction( TInt aFunction, TBool aIncludesThreadId, TBool aIncludesThreadName ); |
66 static TInt ValidateFunction( TInt aFunction, TBool aIncludesThreadId, TBool aIncludesThreadName ); |
97 void HandleThreadSpecificOpL( TInt aFunction, const TThreadId& aThreadId ); |
67 void HandleThreadSpecificOpL( TInt aFunction, const TThreadId& aThreadId ); |
98 void HandleThreadSpecificOpL( TInt aFunction, const TDesC& aThreadName ); |
68 void HandleThreadSpecificOpL( TInt aFunction, const TDesC& aThreadName ); |
99 void HandleThreadAgnosticOpL( TInt aFunction, const RMessage2& aMessage ); |
69 void HandleThreadAgnosticOpL( TInt aFunction, const RMessage2& aMessage ); |
100 void StartDeviceWideOperationL(CMemSpyDeviceWideOperations::TOperation aOperation, const RMessage2& aMessage); |
|
101 |
|
102 inline CMemSpyEngineServer& Server() const { return *static_cast<CMemSpyEngineServer*>(const_cast<CServer2*>(CSession2::Server())); } |
|
103 |
70 |
104 private: |
71 private: |
105 CMemSpyEngine& iEngine; |
72 CMemSpyEngine& iEngine; |
106 HBufC* iClientThreadName; |
73 HBufC* iClientThreadName; |
107 TUint32 iClientThreadId; |
74 TUint32 iClientThreadId; |
108 TBool iIsCliRequest; |
|
109 }; |
75 }; |
110 |
76 |
111 /** |
|
112 * CMemSpyDwOperationTracker |
|
113 * Tracks device wide operation progress and calls iOperationMessage.Complete upon completion. |
|
114 */ |
|
115 NONSHARABLE_CLASS( CMemSpyDwOperationTracker ) : public MMemSpyDeviceWideOperationsObserver |
|
116 { |
|
117 public: |
|
118 static CMemSpyDwOperationTracker* NewL(CMemSpyDeviceWideOperations::TOperation aOperation, |
|
119 const RMessage2& aOperationMessage, |
|
120 CMemSpyEngineServer& aServer); |
|
121 ~CMemSpyDwOperationTracker(); |
|
122 |
|
123 void AddNotificationL(const RMessage2& aMessage); |
|
124 |
|
125 void Cancel(); |
|
126 |
|
127 public: // From MMemSpyDeviceWideOperationsObserver |
|
128 void HandleDeviceWideOperationEvent(TEvent aEvent, TInt aParam1, const TDesC& aParam2); |
|
129 |
|
130 private: |
|
131 CMemSpyDwOperationTracker(const RMessage2& aOperationMessage, CMemSpyEngineServer& aServer); |
|
132 void ConstructL(CMemSpyDeviceWideOperations::TOperation aOperation); |
|
133 |
|
134 private: |
|
135 RMessage2 iOperationMessage; |
|
136 CMemSpyEngineServer& iServer; |
|
137 CArrayFixFlat<RMessage2>* iPendingNotifications; |
|
138 CMemSpyDeviceWideOperations* iOperation; |
|
139 TInt iProgress; |
|
140 }; |
|
141 |
77 |
142 |
78 |
143 #endif |
79 #endif |