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> |
26 |
27 |
27 // Classes referenced |
28 // Classes referenced |
28 class CMemSpyEngine; |
29 class CMemSpyEngine; |
|
30 class CMemSpyDwOperationTracker; |
29 |
31 |
30 |
32 NONSHARABLE_CLASS( CShutdown ) : public CTimer |
|
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 }; |
31 |
42 |
32 NONSHARABLE_CLASS( CMemSpyEngineServer ) : public CServer2 |
43 NONSHARABLE_CLASS( CMemSpyEngineServer ) : public CServer2 |
33 { |
44 { |
34 public: |
45 public: |
35 static CMemSpyEngineServer* NewL( CMemSpyEngine& aEngine ); |
46 static CMemSpyEngineServer* NewL( CMemSpyEngine& aEngine ); |
36 ~CMemSpyEngineServer(); |
47 ~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); |
37 |
56 |
38 private: |
57 private: |
39 CMemSpyEngineServer( CMemSpyEngine& aEngine ); |
58 CMemSpyEngineServer( CMemSpyEngine& aEngine ); |
40 void ConstructL(); |
59 void ConstructL(); |
41 |
60 |
42 protected: // From CServer2 |
61 protected: // From CServer2 |
43 CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; |
62 CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; |
44 |
63 |
45 private: |
64 private: |
46 CMemSpyEngine& iEngine; |
65 CMemSpyEngine& iEngine; |
|
66 CMemSpyDwOperationTracker* iCurrentOperationTracker; |
|
67 |
|
68 TInt iSessionCount; |
|
69 TBool iCliConnected; |
|
70 |
|
71 CShutdown iShutdown; |
47 }; |
72 }; |
48 |
73 |
49 |
74 |
50 |
75 |
51 NONSHARABLE_CLASS( CMemSpyEngineSession ) : public CSession2 |
76 NONSHARABLE_CLASS( CMemSpyEngineSession ) : public CSession2 |
52 { |
77 { |
53 public: |
78 public: |
54 static CMemSpyEngineSession* NewL( CMemSpyEngine& aEngine, const RMessage2& aMessage ); |
79 static CMemSpyEngineSession* NewL( CMemSpyEngine& aEngine, const RMessage2& aMessage ); |
55 ~CMemSpyEngineSession(); |
80 ~CMemSpyEngineSession(); |
56 |
81 |
|
82 void CreateL(); |
|
83 |
57 private: |
84 private: |
58 CMemSpyEngineSession( CMemSpyEngine& aEngine ); |
85 CMemSpyEngineSession( CMemSpyEngine& aEngine ); |
59 void ConstructL( const RMessage2& aMessage ); |
86 void ConstructL( const RMessage2& aMessage ); |
60 |
87 |
61 private: // From CSession2 |
88 private: // From CSession2 |
62 void ServiceL( const RMessage2& aMessage ); |
89 void ServiceL( const RMessage2& aMessage ); |
63 |
90 |
64 private: // Internal methods |
91 private: // Internal methods |
65 void DoServiceL( const RMessage2& aMessage ); |
92 void DoServiceL( const RMessage2& aMessage ); |
|
93 void DoAsyncServiceL( const RMessage2& aMessage ); |
66 void DoUiServiceL( const RMessage2& aMessage ); |
94 void DoUiServiceL( const RMessage2& aMessage ); |
67 void DoCmdServiceL( const RMessage2& aMessage ); |
95 void DoCmdServiceL( const RMessage2& aMessage ); |
68 static TInt ValidateFunction( TInt aFunction, TBool aIncludesThreadId, TBool aIncludesThreadName ); |
96 static TInt ValidateFunction( TInt aFunction, TBool aIncludesThreadId, TBool aIncludesThreadName ); |
69 void HandleThreadSpecificOpL( TInt aFunction, const TThreadId& aThreadId ); |
97 void HandleThreadSpecificOpL( TInt aFunction, const TThreadId& aThreadId ); |
70 void HandleThreadSpecificOpL( TInt aFunction, const TDesC& aThreadName ); |
98 void HandleThreadSpecificOpL( TInt aFunction, const TDesC& aThreadName ); |
71 void HandleThreadAgnosticOpL( TInt aFunction, const RMessage2& aMessage ); |
99 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())); } |
72 |
103 |
73 private: |
104 private: |
74 CMemSpyEngine& iEngine; |
105 CMemSpyEngine& iEngine; |
75 HBufC* iClientThreadName; |
106 HBufC* iClientThreadName; |
76 TUint32 iClientThreadId; |
107 TUint32 iClientThreadId; |
|
108 TBool iIsCliRequest; |
77 }; |
109 }; |
78 |
110 |
|
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 }; |
79 |
141 |
80 |
142 |
81 #endif |
143 #endif |