www.pudn.com > sockets.rar > socketsengine.h
/* Copyright (c) 2004, Nokia. All rights reserved */ #ifndef __SOCKETSENGINE_H__ #define __SOCKETSENGINE_H__ // INCLUDES #include#include "TimeOutNotifier.h" #include "EngineNotifier.h" #include "Sockets.hrh" // CONSTANTS _LIT( KDefaultServerName, "127.0.0.1" ); _LIT( KStrNewLine, "\r\n" ); // String length for localized messages shown in non-leaving functions const TInt KMaxMessageLength = 256; // FORWARD DECLARATIONS class CSocketsReader; class CSocketsWriter; class CTimeOutTimer; class MUINotifier; // CLASS DECLARATION /** * CSocketsEngine * This class is the main engine part of the sockets application. * It establishes a TCP connection using its server name and port number * (performing a DNS lookup operation first, if appropriate). * It creates instances of separate active objects to perform reading from, * and writing to, the socket. */ class CSocketsEngine : public CActive, public MTimeOutNotifier, public MEngineNotifier { public: // Constructors and destructors /** * NewL. * Two-phased constructor. * Creates a CSocketsEngine object using two phase construction, * and returns a pointer to the created object. * @param aConsole Console to use for ui output. * @return A pointer to the created instance of CSocketsEngine. */ static CSocketsEngine* NewL( MUINotifier& aConsole ); /** * NewLC. * Two-phased constructor. * Creates a CSocketsEngine object using two phase construction, * and returns a pointer to the created object. * @param aConsole Console to use for ui output. * @return A pointer to the created instance of CSocketsEngine. */ static CSocketsEngine* NewLC( MUINotifier& aConsole ); /** * ~CSocketsEngine. * Destructor. * Destroys the object and release all memory objects. */ virtual ~CSocketsEngine(); public: // New functions /** * ConnectL. * Initiates connection of socket, using iServerName and iPort. */ void ConnectL(); /** * Disconnect. * Disconnects socket. */ void Disconnect(); /** * WriteL. * Writes data to socket. * @param aData Data to be written. */ void WriteL( const TDesC8& aData ); /** * Read. * Initiates read of data from socket. */ void Read(); /** * SetServerName. * Sets name of server to connect to. * @param aName New server name. */ void SetServerName( const TDesC& aName ); /** * ServerName. * Gets server name. * @return Name of server. */ const TDesC& ServerName() const; /** * SetPort. * Sets port number to connect to. * @param aPort New port number. */ void SetPort( TInt aPort ); /** * Port. * Gets port number. * @return Port number. */ TInt Port() const; /** * Connected. * Checks if socket is fully connected. * @return ETrue if socket is connected. */ TBool Connected() const; public: // Functions from base classes /** * From MTimeOutNotifier, TimerExpired. * The function to be called when a timeout occurs. */ void TimerExpired(); /** * From MEngineNotifier, ReportError. * Report a communication error. * @param aErrorType Error type. * @param aErrorCode Associated error code. */ void ReportError( MEngineNotifier::TErrorType aErrorType, TInt aErrorCode ); /** * From MEngineNotifier, ResponseReceived. * Data has been received on the socket and read into a buffer. * @param aBuffer The data buffer. */ void ResponseReceived( const TDesC8& aBuffer ); protected: // Functions from base classes /** * From CActive, DoCancel. * Cancels any outstanding operation. */ void DoCancel(); /** * From CActive, RunL. * Called when operation completes. */ void RunL(); private: // Constructors and destructors /** * CSocketsEngine. * C++ default constructor. * Performs the first phase of two phase construction. * @param aConsole The console to use for ui output. */ CSocketsEngine( MUINotifier& aConsole ); /** * ConstructL. * 2nd phase constructor. */ void ConstructL(); private: // Enumerations /** * TSocketsEngineState. * Tracks the state of this object through the connection process. * - ENotConnected The initial ( idle ) state. * - EConnecting A connect request is pending with the * socket server. * - EConnected A connection has been established. * - ELookingUp A DNS lookup request is pending with the * socket server. */ enum TSocketsEngineState { ENotConnected, EConnecting, EConnected, ELookingUp }; private: // New functions /** * ConnectL. * Initiates a connect operation on a socket. * @param aAddr The ip address to connect to. */ void ConnectL( TUint32 aAddr ); /** * ChangeStatus. * Handles a change in this object's status. * @param aNewStatus New status. */ void ChangeStatus( TSocketsEngineState aNewStatus ); /** * Print. * Displays text on the console. * @param aDes Text to display. */ void Print( const TDesC& aDes ); private: // Constants /** * KTimeOut, the maximum time allowed for a lookup or connect * requests to complete. */ static const TInt KTimeOut; /** * KDefaultPortNumber, the initial port number displayed to the user. */ static const TInt KDefaultPortNumber; private: // Data /** * iEngineStatus, this object's current status. */ TSocketsEngineState iEngineStatus; /** * iConsole, console for displaying text etc. */ MUINotifier& iConsole; /** * iSocket, the actual socket. */ RSocket iSocket; /** * iSocketsReader, active object to control reads from the socket. * Owned by CSocketsEngine object. */ CSocketsReader* iSocketsReader; /** * iSocketsWriter, active object to control writes to the socket. * Owned by CSocketsEngine object. */ CSocketsWriter* iSocketsWriter; /** * iSocketServ, the socket server. */ RSocketServ iSocketServ; /** * iResolver, DNS name resolver. */ RHostResolver iResolver; /** * iNameEntry, the result from the name resolver. */ TNameEntry iNameEntry; /** * iNameRecord, the name record found by the resolver. */ TNameRecord iNameRecord; /** * iTimer, timer active object. * Owned by CSocketsEngine object. */ CTimeOutTimer* iTimer; /** * iAddress, the address to be used in the connection. */ TInetAddr iAddress; /** * iPort, the port number to connect to. */ TInt iPort; /** * iServerName, the server name to connect to. */ TBuf iServerName; }; #endif // __SOCKETSENGINE_H__ // End of File