00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _ECHOENG_H_
00019 #define _ECHOENG_H_
00020
00021 #include <e32cons.h>
00022 #include <in_sock.h>
00023 #include <nifman.h>
00024
00025
00026 class MTimeOutNotify
00027 {
00028 public:
00029 virtual void TimerExpired() = 0;
00030 };
00031
00032
00033 class MUINotify
00034 {
00035 public:
00036 virtual void PrintNotify(const TDesC& aMessage) = 0;
00037 virtual void PrintNotify(TInt aMessage) = 0;
00038 virtual void ErrorNotifyL(const TDesC& aErrMessage, TInt aErrCode) = 0;
00039 };
00040
00041
00042 class CTimeOutTimer: public CTimer
00043 {
00044 public:
00045 static CTimeOutTimer* NewL(const TInt aPriority, MTimeOutNotify& aTimeOutNotify);
00046 ~CTimeOutTimer();
00047
00048 protected:
00049 CTimeOutTimer(const TInt aPriority);
00050 void ConstructL(MTimeOutNotify& aTimeOutNotify);
00051 virtual void RunL();
00052
00053 private:
00054 MTimeOutNotify* iNotify;
00055 };
00056
00057
00058 class CEchoRead : public CActive
00059 {
00060 public:
00061
00062 void IssueRead();
00063 void IssueRecvFrom(TInetAddr &aAddr);
00064
00065
00066 void DoCancel();
00067 void RunL();
00068 CEchoRead(RSocket* aSocket, MUINotify* aConsole);
00069
00070
00071 private:
00072 RSocket* iEchoSocket;
00073 MUINotify* iConsole;
00074 TBuf8<1> iBuffer;
00075 };
00076
00077
00078 class CEchoWrite : public CActive, public MTimeOutNotify
00079 {
00080 public:
00081 enum TWriteState
00082 {
00083 ESending, EWaiting ,ETimedOut
00084 };
00085
00086 public:
00087 static CEchoWrite* NewL(RSocket* aSocket, MUINotify* aConsole);
00088 static CEchoWrite* NewLC(RSocket* aSocket, MUINotify* aConsole);
00089 ~CEchoWrite();
00090 void ConstructL(RSocket* aSocket, MUINotify* aConsole);
00091 void IssueWrite(const TChar &aChar);
00092 void IssueSendTo(TInetAddr &aAddr, const TChar &aChar);
00093
00094
00095 void DoCancel();
00096 void RunL();
00097
00098
00099 void TimerExpired();
00100
00101 protected:
00102 CEchoWrite();
00103
00104 private:
00105 MUINotify* iConsole;
00106 RSocket* iEchoSocket;
00107 TBuf8<1> iBuffer;
00108 CTimeOutTimer* iTimer;
00109 TInt iTimeOut;
00110 TWriteState iWriteStatus;
00111 };
00112
00113
00114 class CEchoEngine : public CActive, public MTimeOutNotify
00115 {
00116 public:
00117 enum TEchoEngineState
00118 {
00119 EComplete, EConnecting, EConnected, ETimedOut,
00120 ELookingUp, ELookUpFailed, EConnectFailed,
00121
00122 };
00123 public:
00124 IMPORT_C CEchoEngine();
00125 IMPORT_C static CEchoEngine* NewL(MUINotify* aConsole);
00126 IMPORT_C static CEchoEngine* NewLC(MUINotify* aConsole);
00127 IMPORT_C void ConstructL(MUINotify* aConsole);
00128 IMPORT_C void Stop();
00129 IMPORT_C void ConnectTo(TUint32 aAddr);
00130 IMPORT_C void ConnectL(const TDesC& aServerName);
00131 IMPORT_C void Write(TChar aChar);
00132 IMPORT_C void Read();
00133 IMPORT_C void TestGetByAddrL(TUint32 aAddr);
00134
00135
00136 void TimerExpired();
00137
00138
00139 void DoCancel();
00140 void RunL();
00141
00142 ~CEchoEngine();
00143
00144 private:
00145 TEchoEngineState iEngineStatus;
00146 MUINotify* iConsole;
00147 CEchoRead* iEchoRead;
00148 CEchoWrite* iEchoWrite;
00149 RSocket iEchoSocket;
00150 RSocketServ iSocketServ;
00151 RHostResolver iResolver;
00152 TNameEntry iNameEntry;
00153 TNameRecord iNameRecord;
00154 CTimeOutTimer* iTimer;
00155 TInt iTimeOut;
00156 TInetAddr iAddress;
00157 };
00158
00159 #endif
00160