0
|
1 |
// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
2 |
// All rights reserved.
|
|
3 |
// This component and the accompanying materials are made available
|
|
4 |
// under the terms of the License "Eclipse Public License v1.0"
|
|
5 |
// which accompanies this distribution, and is available
|
|
6 |
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
7 |
//
|
|
8 |
// Initial Contributors:
|
|
9 |
// Nokia Corporation - initial contribution.
|
|
10 |
//
|
|
11 |
// Contributors:
|
|
12 |
//
|
|
13 |
// Description:
|
|
14 |
// e32\include\twintnotifier.h
|
|
15 |
// Text Window Server text notifiers.
|
|
16 |
//
|
|
17 |
// WARNING: This file contains some APIs which are internal and are subject
|
|
18 |
// to change without notice. Such APIs should therefore not be used
|
|
19 |
// outside the Kernel and Hardware Services package.
|
|
20 |
//
|
|
21 |
|
|
22 |
#ifndef __TWINTNOTIFIER_H__
|
|
23 |
#define __TWINTNOTIFIER_H__
|
|
24 |
|
|
25 |
#include <f32file.h>
|
|
26 |
|
|
27 |
|
|
28 |
// Notifier Plugin architecture copied from UIKON
|
|
29 |
|
|
30 |
|
|
31 |
|
|
32 |
/**
|
|
33 |
@internalComponent
|
|
34 |
*/
|
|
35 |
_LIT(KNotifierPlugInExt,"*.*");
|
|
36 |
|
|
37 |
|
|
38 |
|
|
39 |
/**
|
|
40 |
@publishedPartner
|
|
41 |
@released
|
|
42 |
|
|
43 |
Defines the path which is searched for notifier plugin DLLs.
|
|
44 |
*/
|
|
45 |
_LIT(KNotifierPlugInSearchPath,"\\sys\\bin\\tnotifiers\\");
|
|
46 |
|
|
47 |
|
|
48 |
|
|
49 |
/**
|
|
50 |
@publishedPartner
|
|
51 |
@deprecated
|
|
52 |
*/
|
|
53 |
const TUid KUidNotifierPlugIn={0x10005522};
|
|
54 |
|
|
55 |
|
|
56 |
|
|
57 |
/**
|
|
58 |
@publishedPartner
|
|
59 |
@released
|
|
60 |
*/
|
|
61 |
const TUid KUidTextNotifierPlugInV2={0x101fe38b};
|
|
62 |
|
|
63 |
|
|
64 |
|
|
65 |
/**
|
|
66 |
@internalComponent
|
|
67 |
*/
|
|
68 |
_LIT8(KNotifierPaused,"Eik_Notifier_Paused");
|
|
69 |
|
|
70 |
|
|
71 |
|
|
72 |
/**
|
|
73 |
@internalComponent
|
|
74 |
*/
|
|
75 |
_LIT8(KNotifierResumed,"Eik_Notifier_Resumed");
|
|
76 |
|
|
77 |
|
|
78 |
|
|
79 |
enum TNotExtStatus
|
|
80 |
/**
|
|
81 |
@internalComponent
|
|
82 |
*/
|
|
83 |
{
|
|
84 |
ENotExtRequestCompleted =0,
|
|
85 |
ENotExtRequestQueued =1,
|
|
86 |
};
|
|
87 |
|
|
88 |
|
|
89 |
|
|
90 |
|
|
91 |
class MNotifierManager
|
|
92 |
/**
|
|
93 |
@publishedPartner
|
|
94 |
@released
|
|
95 |
|
|
96 |
An interface that allows notifiers to manage their own startup and shutdown.
|
|
97 |
|
|
98 |
This class is likely to be of interest to notifiers that observe engines
|
|
99 |
using publically available APIs rather than those that are run via RNotifier
|
|
100 |
|
|
101 |
@see RNotifier
|
|
102 |
*/
|
|
103 |
{
|
|
104 |
public:
|
|
105 |
/**
|
|
106 |
Starts the specified notifier.
|
|
107 |
|
|
108 |
@param aNotifierUid The Uid that identifies the notifier.
|
|
109 |
@param aBuffer Data that can be passed from the client-side.
|
|
110 |
The format and meaning of any data
|
|
111 |
is implementation dependent.
|
|
112 |
@param aResponse Data that can be returned to the client-side.
|
|
113 |
The format and meaning of any data is implementation dependent.
|
|
114 |
*/
|
|
115 |
virtual void StartNotifierL(TUid aNotifierUid,const TDesC8& aBuffer,TDes8& aResponse)=0;
|
|
116 |
|
|
117 |
|
|
118 |
|
|
119 |
/**
|
|
120 |
Cancels the specified notifier.
|
|
121 |
|
|
122 |
@param aNotifierUid The Uid that identifies the notifier.
|
|
123 |
*/
|
|
124 |
virtual void CancelNotifier(TUid aNotifierUid)=0;
|
|
125 |
|
|
126 |
|
|
127 |
/**
|
|
128 |
Updates a currently active notifier with new data.
|
|
129 |
|
|
130 |
@param aNotifierUid The Uid that identifies the notifier.
|
|
131 |
@param aBuffer New data that can be passed from the client-side.
|
|
132 |
The format and meaning of any data is implementation dependent.
|
|
133 |
@param aResponse Data that can be returned to the client-side.
|
|
134 |
The format and meaning of any data is implementation dependent.
|
|
135 |
*/
|
|
136 |
virtual void UpdateNotifierL(TUid aNotifierUid,const TDesC8& aBuffer,TDes8& aResponse)=0;
|
|
137 |
};
|
|
138 |
|
|
139 |
|
|
140 |
|
|
141 |
|
|
142 |
class MNotifierBase2
|
|
143 |
/**
|
|
144 |
@publishedPartner
|
|
145 |
@released
|
|
146 |
|
|
147 |
Interface to a plug-in server side notifier for the text window server.
|
|
148 |
|
|
149 |
Any number of MNotifierBase2 objects can be included in a single DLL.
|
|
150 |
All notifiers are loaded during device startup and are not destroyed until
|
|
151 |
the notifier server closes down.
|
|
152 |
|
|
153 |
Note that the text window server is not used in production ROMs.
|
|
154 |
It is used when testing low level code.
|
|
155 |
*/
|
|
156 |
{
|
|
157 |
public:
|
|
158 |
/**
|
|
159 |
Defines a set of notifier priorities. The use and application of these
|
|
160 |
values is implementation dependent. ENotifierPriorityAbsolute defines
|
|
161 |
the highest priority value; subsequent enum values define decreasing
|
|
162 |
priority values.
|
|
163 |
*/
|
|
164 |
enum TNotifierPriority
|
|
165 |
{
|
|
166 |
ENotifierPriorityAbsolute=500,
|
|
167 |
ENotifierPriorityVHigh=400,
|
|
168 |
ENotifierPriorityHigh=300,
|
|
169 |
ENotifierPriorityLow=200,
|
|
170 |
ENotifierPriorityVLow=100,
|
|
171 |
ENotifierPriorityLowest=0
|
|
172 |
};
|
|
173 |
public:
|
|
174 |
/**
|
|
175 |
Encapsulates the notifier parameters.
|
|
176 |
*/
|
|
177 |
class TNotifierInfo
|
|
178 |
{
|
|
179 |
public:
|
|
180 |
/**
|
|
181 |
The Uid that identifies the notifier.
|
|
182 |
*/
|
|
183 |
TUid iUid;
|
|
184 |
|
|
185 |
/**
|
|
186 |
The Uid that identifies the channel to be used by
|
|
187 |
the notifier (e.g. the screen, an LED etc).
|
|
188 |
*/
|
|
189 |
TUid iChannel;
|
|
190 |
|
|
191 |
/**
|
|
192 |
The notifier priority, typically chosen from the standard set.
|
|
193 |
|
|
194 |
@see MNotifierBase2::TNotifierPriority
|
|
195 |
*/
|
|
196 |
TInt iPriority;
|
|
197 |
};
|
|
198 |
public:
|
|
199 |
|
|
200 |
|
|
201 |
|
|
202 |
/**
|
|
203 |
Frees all resources owned by this notifier.
|
|
204 |
|
|
205 |
This function is called by the notifier framework when all resources
|
|
206 |
allocated by notifiers should be freed. As a minimum, the implementation
|
|
207 |
should delete this object (i.e. delete this;).
|
|
208 |
|
|
209 |
Note that it is important to implement this function correctly
|
|
210 |
to avoid memory leaks.
|
|
211 |
*/
|
|
212 |
virtual void Release()=0;
|
|
213 |
|
|
214 |
|
|
215 |
|
|
216 |
/**
|
|
217 |
Performs any initialisation that this notifier may require.
|
|
218 |
|
|
219 |
The function is called when the notifier is first loaded,
|
|
220 |
i.e. when the plug-in DLL is loaded. It is called only once.
|
|
221 |
|
|
222 |
As a minimum, the implementation should return a TNotifierInfo instance
|
|
223 |
describing the notifier parameters. A good implementation would be to set
|
|
224 |
up a TNotifierInfo as a data member, and then to return it. This is because
|
|
225 |
the same information is returned by Info().
|
|
226 |
|
|
227 |
The function is safe to leave from, so it is possible,
|
|
228 |
although rarely necessary, to allocate objects as you would normally do
|
|
229 |
in a ConstructL() function as part of two-phase construction.
|
|
230 |
|
|
231 |
@return The parameters of the notifier.
|
|
232 |
|
|
233 |
@see MNotifierBase2::Info
|
|
234 |
*/
|
|
235 |
virtual TNotifierInfo RegisterL()=0;
|
|
236 |
|
|
237 |
|
|
238 |
|
|
239 |
/**
|
|
240 |
Gets the notifier parameters.
|
|
241 |
|
|
242 |
This is the same information as returned by RegisterL(), although
|
|
243 |
the returned values may be varied at run-time.
|
|
244 |
*/
|
|
245 |
virtual TNotifierInfo Info() const=0;
|
|
246 |
|
|
247 |
|
|
248 |
|
|
249 |
/**
|
|
250 |
Starts the notifier.
|
|
251 |
|
|
252 |
This is called as a result of a client-side call
|
|
253 |
to RNotifier::StartNotifier(), which the client uses to start a notifier
|
|
254 |
from which it does not expect a response.
|
|
255 |
|
|
256 |
The function is synchronous, but it should be implemented so that
|
|
257 |
it completes as soon as possible, allowing the notifier framework
|
|
258 |
to enforce its priority mechanism.
|
|
259 |
|
|
260 |
It is not possible to wait for a notifier to complete before returning
|
|
261 |
from this function unless the notifier is likely to finish implementing
|
|
262 |
its functionality immediately.
|
|
263 |
|
|
264 |
@param aBuffer Data that can be passed from the client-side.
|
|
265 |
The format and meaning of any data is implementation dependent.
|
|
266 |
|
|
267 |
@return A pointer descriptor representing data for the initial response
|
|
268 |
|
|
269 |
@see RNotifier::StartNotifier
|
|
270 |
*/
|
|
271 |
virtual TPtrC8 StartL(const TDesC8& aBuffer)=0;
|
|
272 |
|
|
273 |
|
|
274 |
|
|
275 |
/**
|
|
276 |
Starts the notifier.
|
|
277 |
|
|
278 |
This is called as a result of a client-side call to
|
|
279 |
the asynchronous function RNotifier::StartNotifierAndGetResponse().
|
|
280 |
This means that the client is waiting, asynchronously, for the notifier
|
|
281 |
to tell the client that it has finished its work.
|
|
282 |
|
|
283 |
It is important to return from this function as soon as possible,
|
|
284 |
|
|
285 |
The implementation of a derived class must make sure that Complete() is
|
|
286 |
called on the RMessage2 object when the notifier is deactivated.
|
|
287 |
|
|
288 |
This function may be called multiple times if more than one client starts
|
|
289 |
the notifier.
|
|
290 |
|
|
291 |
@param aBuffer Data that can be passed from the client-side. The format
|
|
292 |
and meaning of any data is implementation dependent.
|
|
293 |
@param aReplySlot The offset within the message arguments for the reply.
|
|
294 |
This message argument will refer to a modifiable
|
|
295 |
descriptor, a TDes8 type, into which data
|
|
296 |
can be returned. The format and meaning
|
|
297 |
of any returned data is implementation dependent.
|
|
298 |
@param aMessage Encapsulates a client request.
|
|
299 |
|
|
300 |
@see RNotifier::StartNotifierAndGetResponse
|
|
301 |
*/
|
|
302 |
virtual void StartL(const TDesC8& aBuffer, TInt aReplySlot, const RMessagePtr2& aMessage)=0;
|
|
303 |
|
|
304 |
|
|
305 |
|
|
306 |
/**
|
|
307 |
Cancels an active notifier.
|
|
308 |
|
|
309 |
This is called as a result of a client-side call
|
|
310 |
to RNotifier::CancelNotifier().
|
|
311 |
|
|
312 |
An implementation should free any relevant resources, and complete
|
|
313 |
any outstanding messages, if relevant.
|
|
314 |
|
|
315 |
@see RNotifier::CancelNotifier
|
|
316 |
*/
|
|
317 |
virtual void Cancel()=0;
|
|
318 |
|
|
319 |
|
|
320 |
|
|
321 |
/**
|
|
322 |
Updates a currently active notifier with new data.
|
|
323 |
|
|
324 |
This is called as a result of a client-side call
|
|
325 |
to RNotifier::UpdateNotifier().
|
|
326 |
|
|
327 |
@param aBuffer Data that can be passed from the client-side.
|
|
328 |
The format and meaning of any data is
|
|
329 |
implementation dependent.
|
|
330 |
|
|
331 |
@return A pointer descriptor representing data that may be returned.
|
|
332 |
The format and meaning of any data is implementation dependent.
|
|
333 |
|
|
334 |
@see RNotifier::UpdateNotifier
|
|
335 |
*/
|
|
336 |
virtual TPtrC8 UpdateL(const TDesC8& aBuffer)=0;
|
|
337 |
public:
|
|
338 |
|
|
339 |
|
|
340 |
|
|
341 |
/**
|
|
342 |
Sets the notifier manager.
|
|
343 |
|
|
344 |
@param aManager A pointer to the notifier manager.
|
|
345 |
*/
|
|
346 |
void SetManager(MNotifierManager* aManager);
|
|
347 |
protected:
|
|
348 |
MNotifierManager* iManager;
|
|
349 |
private:
|
|
350 |
TInt iNotBSpare;
|
|
351 |
};
|
|
352 |
|
|
353 |
|
|
354 |
|
|
355 |
|
|
356 |
|
|
357 |
|
|
358 |
// Remaining classes are internal to the text window server
|
|
359 |
|
|
360 |
|
|
361 |
|
|
362 |
class CNotifierManager;
|
|
363 |
|
|
364 |
/**
|
|
365 |
@internalComponent
|
|
366 |
*/
|
|
367 |
class CNotifierServer : public CServer2
|
|
368 |
{
|
|
369 |
public:
|
|
370 |
static CNotifierServer* NewL();
|
|
371 |
~CNotifierServer();
|
|
372 |
public: // from CServer2
|
|
373 |
CSession2* NewSessionL(const TVersion &aVersion,const RMessage2&) const;
|
|
374 |
public:
|
|
375 |
CNotifierServer(TInt aPriority);
|
|
376 |
inline CNotifierManager* Manager() const;
|
|
377 |
public:
|
|
378 |
void SetIsExiting();
|
|
379 |
TBool IsExiting() const;
|
|
380 |
private:
|
|
381 |
void ConstructL();
|
|
382 |
private:
|
|
383 |
CNotifierManager* iManager;
|
|
384 |
TBool iExiting;
|
|
385 |
};
|
|
386 |
|
|
387 |
|
|
388 |
|
|
389 |
|
|
390 |
/**
|
|
391 |
@internalComponent
|
|
392 |
*/
|
|
393 |
class CNotifierSession : public CSession2
|
|
394 |
{
|
|
395 |
public:
|
|
396 |
CNotifierSession(const CNotifierServer& aServer);
|
|
397 |
~CNotifierSession();
|
|
398 |
public: // from CSession2
|
|
399 |
void ServiceL(const RMessage2& aMessage);
|
|
400 |
private:
|
|
401 |
enum TNotifierPanic
|
|
402 |
{
|
|
403 |
ENotifierPanicInconsistentDescriptorLengths=0,
|
|
404 |
ENotifierPanicPasswordWindow,
|
|
405 |
};
|
|
406 |
private:
|
|
407 |
void DisplayAlertL(const RMessage2& aMessage);
|
|
408 |
void DisplayInfoMsgL(const RMessage2& aMessage);
|
|
409 |
void DoStartNotifierL(const RMessage2& aMessage);
|
|
410 |
void DoUpdateNotifierL(const RMessage2& aMessage);
|
|
411 |
void StartNotifierAndGetResponseL(const RMessage2& aMessage,TBool& aCleanupComplete);
|
|
412 |
void PanicClient(const RMessage2& aMessage,TNotifierPanic aCode);
|
|
413 |
static TInt InfoPrintThread(TAny* aMessage);
|
|
414 |
void RunPasswordWindowL(const RMessage2& aMessage);
|
|
415 |
public:
|
|
416 |
static RSemaphore NotifierSemaphore;
|
|
417 |
private:
|
|
418 |
const CNotifierServer* iServer;
|
|
419 |
TInt iClientId;
|
|
420 |
};
|
|
421 |
|
|
422 |
|
|
423 |
|
|
424 |
|
|
425 |
class CQueueItem;
|
|
426 |
class CChannelMonitor;
|
|
427 |
class CActivityMonitor;
|
|
428 |
class CNotifierQueue;
|
|
429 |
|
|
430 |
/**
|
|
431 |
@internalComponent
|
|
432 |
*/
|
|
433 |
class CNotifierManager : public CBase, public MNotifierManager
|
|
434 |
{
|
|
435 |
public:
|
|
436 |
static CNotifierManager* NewL();
|
|
437 |
~CNotifierManager();
|
|
438 |
void RegisterL(RFs& aFs);
|
|
439 |
void NotifierStartL(TUid aNotifierUid,const TDesC8& aBuffer,TPtrC8* aResponse,TInt aClientId);
|
|
440 |
TInt NotifierUpdateL(TUid aNotifierUid,const TDesC8& aBuffer,TDes8* aResponse,TInt aClientId);
|
|
441 |
TInt NotifierCancel(TUid aNotifierUid);
|
|
442 |
void NotifierStartAndGetResponseL(TUid aNotifierUid,const TDesC8& aBuffer,TInt aReplySlot,
|
|
443 |
const RMessage2& aMessage,TInt aClientId,TBool& aCleanupComplete);
|
|
444 |
void HandleClientExit(TInt aClientId);
|
|
445 |
void NotifierStartAndGetResponseL(TUid aNotifierUid,TUid aChannelUid,const TDesC8& aBuffer,TInt aReplySlot,
|
|
446 |
const RMessage2& aMessage,TInt aClientId,TBool& aCleanupComplete);
|
|
447 |
public: // from MNotifierManager
|
|
448 |
void StartNotifierL(TUid aNotifierUid,const TDesC8& aBuffer,TDes8& aResponse);
|
|
449 |
void CancelNotifier(TUid aNotifierUid);
|
|
450 |
void UpdateNotifierL(TUid aNotifierUid,const TDesC8& aBuffer,TDes8& aResponse);
|
|
451 |
private:
|
|
452 |
void DoAddPlugInL(const TDesC& aPath,const TDesC& aFileName,const TUidType& aUidType);
|
|
453 |
CNotifierManager();
|
|
454 |
void ConstructL();
|
|
455 |
void StartFromQueueL(CQueueItem* aItem);
|
|
456 |
private:
|
|
457 |
CArrayPtr<MNotifierBase2>* iObservedList;
|
|
458 |
CArrayFix<RLibrary>* iLibraries;
|
|
459 |
CChannelMonitor* iChannelMonitor;
|
|
460 |
CActivityMonitor* iActivityMonitor;
|
|
461 |
CNotifierQueue* iQueue;
|
|
462 |
};
|
|
463 |
|
|
464 |
|
|
465 |
|
|
466 |
|
|
467 |
/**
|
|
468 |
@internalComponent
|
|
469 |
*/
|
|
470 |
class TChannelActivity
|
|
471 |
{
|
|
472 |
public:
|
|
473 |
inline TChannelActivity(TUid aChannel,TInt aHighestPriorityRunning);
|
|
474 |
public:
|
|
475 |
TUid iChannel;
|
|
476 |
TInt iHighestPriorityRunning;
|
|
477 |
};
|
|
478 |
|
|
479 |
|
|
480 |
|
|
481 |
|
|
482 |
/**
|
|
483 |
@internalComponent
|
|
484 |
*/
|
|
485 |
class CChannelMonitor : public CBase
|
|
486 |
{
|
|
487 |
public:
|
|
488 |
static CChannelMonitor* NewL();
|
|
489 |
inline void AddNewChannelL(TUid aChannel);
|
|
490 |
TBool AlreadyHasChannel(TUid aChannel) const;
|
|
491 |
TInt ActivityLevel(TUid aChannel) const;
|
|
492 |
void UpdateChannel(TUid aChannel,TInt aLevel);
|
|
493 |
private:
|
|
494 |
CChannelMonitor();
|
|
495 |
private:
|
|
496 |
CArrayFixFlat<TChannelActivity> iMonitor;
|
|
497 |
};
|
|
498 |
|
|
499 |
|
|
500 |
|
|
501 |
|
|
502 |
/**
|
|
503 |
@internalComponent
|
|
504 |
*/
|
|
505 |
class CNotifierActivity : public CBase
|
|
506 |
{
|
|
507 |
public:
|
|
508 |
static CNotifierActivity* NewLC(const MNotifierBase2::TNotifierInfo& aInfo,TInt aClientId);
|
|
509 |
~CNotifierActivity();
|
|
510 |
TInt Find(TInt aClientId) const;
|
|
511 |
private:
|
|
512 |
CNotifierActivity(const MNotifierBase2::TNotifierInfo& aInfo);
|
|
513 |
void ConstructL(TInt aClientId);
|
|
514 |
public:
|
|
515 |
const MNotifierBase2::TNotifierInfo iInfo;
|
|
516 |
CArrayFixFlat<TInt> iClientArray;
|
|
517 |
};
|
|
518 |
|
|
519 |
|
|
520 |
|
|
521 |
|
|
522 |
/**
|
|
523 |
@internalComponent
|
|
524 |
*/
|
|
525 |
class CActivityMonitor : public CBase
|
|
526 |
{
|
|
527 |
public:
|
|
528 |
static CActivityMonitor* NewL();
|
|
529 |
~CActivityMonitor();
|
|
530 |
void AddL(const MNotifierBase2::TNotifierInfo& aInfo,TInt aClientId);
|
|
531 |
void Remove(TUid aNotifierUid,TInt aClientId);
|
|
532 |
void RemoveNotifier(TUid aNotifierUid,TUid aChannel);
|
|
533 |
void RemoveClient(TInt aClientId);
|
|
534 |
TBool IsNotifierActive(TUid aNotifierUid,TUid aChannel) const;
|
|
535 |
TBool IsChannelActive(TUid aChannel,TUid& aNotifier,MNotifierBase2::TNotifierPriority& aHighestPriority) const;
|
|
536 |
TBool IsClientPresent(TUid aNotifierUid,TUid aChannel,TInt aClientId) const;
|
|
537 |
TBool NotifierForClient(TUid& aNotifier,TInt aClientId) const;
|
|
538 |
private:
|
|
539 |
CActivityMonitor();
|
|
540 |
TInt Find(TUid aNotifierUid) const;
|
|
541 |
TInt Find(TUid aNotifierUid,TUid aChannel) const;
|
|
542 |
private:
|
|
543 |
CArrayPtrFlat<CNotifierActivity> iMonitor;
|
|
544 |
};
|
|
545 |
|
|
546 |
|
|
547 |
|
|
548 |
|
|
549 |
/**
|
|
550 |
@internalComponent
|
|
551 |
*/
|
|
552 |
class CQueueItem : public CBase
|
|
553 |
{
|
|
554 |
public:
|
|
555 |
static CQueueItem* NewL(const MNotifierBase2::TNotifierInfo& aInfo,const TDesC8& aBuffer,TInt aReplySlot,
|
|
556 |
const RMessage2& aMessage,TInt aClientId); //Asynchronous
|
|
557 |
static CQueueItem* NewL(const MNotifierBase2::TNotifierInfo& aInfo,const TDesC8& aBuffer,
|
|
558 |
TInt aClientId); //synchronous
|
|
559 |
~CQueueItem();
|
|
560 |
private:
|
|
561 |
CQueueItem(const MNotifierBase2::TNotifierInfo& aInfo);
|
|
562 |
void ConstructL(const TDesC8& aBuffer,TInt aClientId);
|
|
563 |
void ConstructL(const TDesC8& aBuffer,const RMessage2& aMessage,TInt aClientId,TInt aReplySlot);
|
|
564 |
public:
|
|
565 |
const MNotifierBase2::TNotifierInfo iInfo;
|
|
566 |
HBufC8* iBuffer;
|
|
567 |
TBool iAsynchronous;
|
|
568 |
RMessage2 iMessage; // IMPORTANT, we need to keep a full RMessage object until suport for V1 notifiers is removed
|
|
569 |
TInt iClientId;
|
|
570 |
TInt iReplySlot;
|
|
571 |
};
|
|
572 |
|
|
573 |
|
|
574 |
|
|
575 |
|
|
576 |
/**
|
|
577 |
@internalComponent
|
|
578 |
*/
|
|
579 |
class CNotifierQueue : public CBase
|
|
580 |
{
|
|
581 |
public:
|
|
582 |
static CNotifierQueue* NewL();
|
|
583 |
inline void QueueItemL(CQueueItem* aItem);
|
|
584 |
CQueueItem* FetchItem(TUid aChannel);
|
|
585 |
TBool IsAlreadyQueued(TUid aNotifier,TUid aChannel) const;
|
|
586 |
void RemoveClient(TInt aClientId);
|
|
587 |
TInt GetHighestQueuePriority(TUid aChannel);
|
|
588 |
private:
|
|
589 |
inline CNotifierQueue();
|
|
590 |
private:
|
|
591 |
CArrayPtrFlat<CQueueItem> iQueue;
|
|
592 |
};
|
|
593 |
|
|
594 |
inline TChannelActivity::TChannelActivity(TUid aChannel, TInt aHighestPriorityRunning)
|
|
595 |
:iChannel(aChannel),iHighestPriorityRunning(aHighestPriorityRunning)
|
|
596 |
{}
|
|
597 |
|
|
598 |
inline void CChannelMonitor::AddNewChannelL(TUid aChannel)
|
|
599 |
{iMonitor.AppendL(TChannelActivity(aChannel,0));}
|
|
600 |
|
|
601 |
inline CNotifierManager* CNotifierServer::Manager() const
|
|
602 |
{return iManager;}
|
|
603 |
|
|
604 |
inline void CNotifierQueue::QueueItemL(CQueueItem* aItem)
|
|
605 |
{iQueue.AppendL(aItem);}
|
|
606 |
inline CNotifierQueue::CNotifierQueue()
|
|
607 |
:iQueue(3)
|
|
608 |
{}
|
|
609 |
|
|
610 |
#endif // __TWINTNOTIFIER_H__
|