00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #if !defined(__ComplexServer_H__)
00017 #define __ComplexServer_H__
00018
00019
00020 const TUint KDefaultHeapSize=0x10000;
00021
00022
00023 enum TCountServPanic
00024 {
00025 EBadRequest = 1,
00026 EBadDescriptor,
00027 EDescriptorNonNumeric,
00028 EMainSchedulerError,
00029 ESvrCreateServer,
00030 ESvrStartServer,
00031 ECreateTrapCleanup,
00032 EBadCounterRemove,
00033 EBadSubsessionHandle
00034 };
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048 class CCountServer : public CServer2
00049 {
00050 public:
00051
00052
00053
00054
00055
00056 CSession2* NewSessionL(const TVersion &aVersion,const RMessage2& aMessage) const;
00057
00058 public:
00059
00060 static CCountServer* NewL(CActive::TPriority aActiveObjectPriority);
00061
00062
00063 static TInt ThreadFunction(TAny* aStarted);
00064
00065
00066 static void PanicServer(TCountServPanic aPanic);
00067
00068 public :
00069
00070 CCountServer(CActive::TPriority aActiveObjectPriority);
00071
00072
00073 void ConstructL();
00074
00075
00076
00077
00078
00079 CObjectCon* NewContainerL();
00080
00081
00082 void RemoveContainer(CObjectCon *aCon);
00083
00084
00085 ~CCountServer();
00086
00087 private:
00088
00089
00090 CObjectConIx* iContainerIndex;
00091 };
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 class CCountSubSession;
00105 class CCountSession : public CSession2
00106 {
00107 public:
00108
00109 static CCountSession* NewL();
00110
00111 public:
00112
00113 CCountSession();
00114
00115
00116
00117 void CreateL();
00118
00119
00120 void ServiceL(const RMessage2& aMessage);
00121 void DispatchMessageL(const RMessage2& aMessage);
00122
00123
00124 void NewCounterL(const RMessage2& aMessage);
00125
00126
00127 void CloseSession();
00128
00129
00130 void NumResourcesL(const RMessage2& aMessage);
00131
00132
00133 CCountSubSession* CounterFromHandle(const RMessage2& aMessage,TInt aHandle);
00134
00135
00136 void DeleteCounter(TInt aHandle);
00137
00138
00139 TInt CountResources();
00140
00141
00142 void PanicClient(const RMessage2& aMessage,TInt aPanic) const;
00143
00144 private:
00145
00146 CObjectCon *iContainer;
00147
00148
00149
00150 CObjectIx* iCountersObjectIndex;
00151
00152
00153
00154 TInt iResourceCount;
00155 };
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165 class CCountSubSession : public CObject
00166 {
00167 public:
00168
00169 static CCountSubSession* NewL(CCountSession* aSession);
00170
00171 public:
00172 CCountSubSession(CCountSession* aSession);
00173 void ConstructL(CCountSession* aSession);
00174 void SetFromStringL(const RMessage2& aMessage);
00175 void Increase();
00176 void IncreaseBy(const RMessage2& aMessage);
00177 void Decrease();
00178 void DecreaseBy(const RMessage2& aMessage);
00179 void Reset();
00180 void CounterValueL(const RMessage2& aMessage);
00181
00182 protected:
00183
00184 CCountSession* iSession;
00185
00186 private:
00187
00188 TInt iCount;
00189 };
00190
00191 #endif