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
00029
00030
00031 #include "CommonFramework.h"
00032
00034
00035
00036
00037
00038
00040 class MProtocol
00041 {
00042 public:
00043 virtual void HandleEvent(TInt aEventCode)=0;
00044 };
00045
00046
00048
00049
00050
00051
00052
00054 class CProtocolUser : public CBase
00055 {
00056 public:
00057
00058 static CProtocolUser* NewLC();
00059 static CProtocolUser* NewL();
00060
00061
00062 ~CProtocolUser();
00063
00064
00065 void DoSomething(MProtocol* aProtocol);
00066
00067 protected:
00068
00069 void ConstructL();
00070 };
00071
00072
00074
00075
00076
00077
00078
00080 class CProtocolProvider : public CBase, public MProtocol
00081 {
00082 public:
00083
00084 static CProtocolProvider* NewLC();
00085
00086
00087 ~CProtocolProvider();
00088
00089
00090 void CallProtocolUser();
00091
00092
00093 void HandleEvent(TInt aEventCode);
00094
00095 protected:
00096
00097 void ConstructL();
00098
00099 private:
00100
00101 CProtocolUser* iProtocolUser;
00102 };
00103
00104
00106
00107
00108
00110 CProtocolUser* CProtocolUser::NewLC()
00111 {
00112 CProtocolUser* self=new(ELeave) CProtocolUser;
00113 CleanupStack::PushL(self);
00114 self->ConstructL();
00115 return self;
00116 }
00117
00118 CProtocolUser* CProtocolUser::NewL()
00119 {
00120 CProtocolUser* self=NewLC();
00121 CleanupStack::Pop();
00122 return self;
00123 }
00124
00125 CProtocolUser::~CProtocolUser()
00126 {
00127 }
00128
00129 void CProtocolUser::ConstructL()
00130 {
00131 }
00132
00133 void CProtocolUser::DoSomething(MProtocol* aProtocol)
00134 {
00135
00136 _LIT(KTxtExtSystemDoing,"External system doing something\n");
00137 console->Printf(KTxtExtSystemDoing);
00138 _LIT(KTxtInvokingProtocol,"invoking protocol - event 3\n");
00139 console->Printf(KTxtInvokingProtocol);
00140
00141 aProtocol->HandleEvent(3);
00142 }
00143
00144
00146
00147
00148
00150 CProtocolProvider* CProtocolProvider::NewLC()
00151 {
00152 CProtocolProvider* self=new(ELeave) CProtocolProvider;
00153 CleanupStack::PushL(self);
00154 self->ConstructL();
00155 return self;
00156 };
00157
00158 CProtocolProvider::~CProtocolProvider()
00159 {
00160 delete iProtocolUser;
00161 }
00162
00163 void CProtocolProvider::ConstructL()
00164 {
00165 iProtocolUser=CProtocolUser::NewL();
00166 }
00167
00168 void CProtocolProvider::CallProtocolUser()
00169 {
00170
00171 _LIT(KTxtCallProtUser,"CProtocolProvider calling protocol user\n");
00172 console->Printf(KTxtCallProtUser);
00173 iProtocolUser->DoSomething(this);
00174
00175
00176 }
00177
00178 void CProtocolProvider::HandleEvent(TInt aEventCode)
00179 {
00180
00181
00182 _LIT(KFormat1,"CProtocolProvider handling event %d\n");
00183 console->Printf(KFormat1,aEventCode);
00184 }
00185
00186
00188
00189
00190
00192 LOCAL_C void doExampleL()
00193 {
00194
00195 CProtocolProvider* simpleProvider=CProtocolProvider::NewLC();
00196
00197 simpleProvider->CallProtocolUser();
00198
00199 CleanupStack::PopAndDestroy();
00200 }