www.pudn.com > sockets.rar > socketswriter.h
/* Copyright (c) 2004, Nokia. All rights reserved */ #ifndef __SOCKETSWRITER_H__ #define __SOCKETSWRITER_H__ // INCLUDES #include#include "TimeOutNotifier.h" // FORWARD DECLARATIONS class CTimeOutTimer; class MEngineNotifier; // CLASS DECLARATION /** * CSocketsWriter * This class handles writing data to the socket. * Data to be written is accumulated in iTransferBuffer, * and is then transferred to iWriteBuffer for the actual * write to the socket. */ class CSocketsWriter : public CActive, public MTimeOutNotifier { public: // Constructors and destructors /** * NewL. * Two-phased constructor. * Creates a CSocketsWriter object using two phase construction, * and returns a pointer to the created object. * @param aEngineNotifier An observer for status reporting. * @param aSocket Socket to write to. * @return A pointer to the created instance of CSocketsWriter. */ static CSocketsWriter* NewL( MEngineNotifier& aEngineNotifier, RSocket& aSocket ); /** * NewLC. * Two-phased constructor. * Creates a CSocketsWriter object using two phase construction, * and returns a pointer to the created object. * @param aEngineNotifier An observer for status reporting. * @param aSocket Socket to write to. * @return A pointer to the created instance of CSocketsWriter. */ static CSocketsWriter* NewLC( MEngineNotifier& aEngineNotifier, RSocket& aSocket ); /** * ~CSocketsWriter. * Destructor. * Destroys the object and release all memory objects. */ virtual ~CSocketsWriter(); public: // New functions /** * IssueWrite. * Writes the data to the socket ( buffered ). * @param aData The data to be written. */ void IssueWriteL( const TDesC8& aData ); public: // Functions from base classes /** * From MTimeOutNotifier, TimerExpired. * Handles a timeout event. */ void TimerExpired(); 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 /** * CSocketsWriter. * C++ default constructor. * Performs the first phase of two phase construction. * @param aEngineNotifier An observer for status reporting. * @param aSocket Socket to write to. */ CSocketsWriter( MEngineNotifier& aEngineNotifier, RSocket& aSocket ); /** * ConstructL. * 2nd phase constructor. */ void ConstructL(); private: // New functions /** * SendNextPacket. * Handles a 'write buffer empty' situation. */ void SendNextPacket(); private: // Constants /** * KWriteBufferSize, the size of the write buffer in bytes. */ enum { KWriteBufferSize = 20 }; /** * KTimeOut, the maximum time allowed for a write to complete. */ static const TInt KTimeOut; private: // Enumerations /** * TWriteState, records whether a write request is pending. * - ESending A write request is pending with the socket server. * - EWaiting The idle state for this object. * */ enum TWriteState { ESending, EWaiting }; private: // Data /** * iSocket, the socket to write to. */ RSocket& iSocket; /** * iEngineNotifier, an observer for status reporting. */ MEngineNotifier& iEngineNotifier; /** * iTransferBuffer, accumulate data to send in here. */ TBuf8 iTransferBuffer; /** * iWriteBuffer, holds data currently being sent to socket. */ TBuf8 iWriteBuffer; /** * iTimer, a timer used to cancel an outstanding write * after a predefined timeout. * Owned by CSocketsWriter object. */ CTimeOutTimer* iTimer; /** * iTimeOut, the timeout to use. */ TInt iTimeOut; /** * iWriteStatus, the state of this active object. */ TWriteState iWriteStatus; }; #endif // __SOCKETSWRITER_H__ // End of File