00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "CommonFramework.h"
00029
00031
00032
00033
00034
00035
00037 class CProtocol : public CBase
00038 {
00039 public:
00040 virtual void HandleEvent(TInt aEventCode)=0;
00041 };
00042
00043
00045
00046
00047
00048
00049
00051 class CProtocolUser : public CBase
00052 {
00053 public:
00054
00055 static CProtocolUser* NewLC();
00056 static CProtocolUser* NewL();
00057
00058
00059 ~CProtocolUser();
00060
00061
00062 void DoSomething(CProtocol* aProtocol);
00063
00064 protected:
00065
00066 void ConstructL();
00067 };
00068
00069
00071
00072
00073
00074
00075
00077 class CProtocolProvider : public CProtocol
00078 {
00079 public:
00080
00081 static CProtocolProvider* NewLC();
00082
00083
00084 ~CProtocolProvider();
00085
00086
00087 void CallProtocolUser();
00088
00089
00090 void HandleEvent(TInt aEventCode);
00091
00092 protected:
00093
00094 void ConstructL();
00095
00096 private:
00097
00098 CProtocolUser* iProtocolUser;
00099 };
00100
00101
00103
00104
00105
00107 CProtocolUser* CProtocolUser::NewLC()
00108 {
00109 CProtocolUser* self=new(ELeave) CProtocolUser;
00110 CleanupStack::PushL(self);
00111 self->ConstructL();
00112 return self;
00113 }
00114
00115 CProtocolUser* CProtocolUser::NewL()
00116 {
00117 CProtocolUser* self=NewLC();
00118 CleanupStack::Pop();
00119 return self;
00120 }
00121
00122 CProtocolUser::~CProtocolUser()
00123 {
00124 }
00125
00126 void CProtocolUser::ConstructL()
00127 {
00128 }
00129
00130 void CProtocolUser::DoSomething(CProtocol* aProtocol)
00131 {
00132
00133 _LIT(KTxtExtSystemDoing,"External system doing something\n");
00134 console->Printf(KTxtExtSystemDoing);
00135 _LIT(KTxtInvokingProtocol,"invoking protocol - event 3\n");
00136 console->Printf(KTxtInvokingProtocol);
00137
00138 aProtocol->HandleEvent(3);
00139 }
00140
00141
00143
00144
00145
00147 CProtocolProvider* CProtocolProvider::NewLC()
00148 {
00149 CProtocolProvider* self=new(ELeave) CProtocolProvider;
00150 CleanupStack::PushL(self);
00151 self->ConstructL();
00152 return self;
00153 };
00154
00155 CProtocolProvider::~CProtocolProvider()
00156 {
00157 delete iProtocolUser;
00158 }
00159
00160 void CProtocolProvider::ConstructL()
00161 {
00162 iProtocolUser=CProtocolUser::NewL();
00163 }
00164
00165 void CProtocolProvider::CallProtocolUser()
00166 {
00167
00168 _LIT(KTxtCallProtUser,"CProtocolProvider calling protocol user\n");
00169 console->Printf(KTxtCallProtUser);
00170 iProtocolUser->DoSomething(this);
00171
00172
00173
00174
00175 }
00176
00177 void CProtocolProvider::HandleEvent(TInt aEventCode)
00178 {
00179
00180
00181 _LIT(KFormat1,"CProtocolProvider handling event %d\n");
00182 console->Printf(KFormat1,aEventCode);
00183 }
00184
00185
00187
00188
00189
00191 LOCAL_C void doExampleL()
00192 {
00193
00194 CProtocolProvider* simpleProvider=CProtocolProvider::NewLC();
00195
00196 simpleProvider->CallProtocolUser();
00197
00198 CleanupStack::PopAndDestroy();
00199 }