www.pudn.com > NetTest2nd.rar > socketswriter.h
/* Copyright (c) 2001, Nokia. All rights reserved */ #ifndef __SOCKETSWRITER_H__ #define __SOCKETSWRITER_H__ #include#include "TimeOutNotifier.h" class CTimeOutTimer; class MEngineNotifier; /*! @class CSocketsWriter @discussion 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: /*! @function NewL @discussion Create a CSocketsWriter object @param aEngineNotifier An observer for status reporting @param aSocket socket to write to @result a pointer to the created instance of CSocketsWriter */ static CSocketsWriter* NewL(MEngineNotifier& aEngineNotifier, RSocket& aSocket); /*! @function NewLC @discussion Create a CSocketsWriter object @param aEngineNotifier An observer for status reporting @param aSocket socket to write to @result a pointer to the created instance of CSocketsWriter */ static CSocketsWriter* NewLC(MEngineNotifier& aEngineNotifier, RSocket& aSocket); /*! @function ~CSocketsWriter @discussion Destroy the object and release all memory objects */ ~CSocketsWriter(); /*! @function IssueWrite @discussion Write the data to the socket (buffered) @param aData the data to be written */ void IssueWriteL(const TDesC8& aData); public: // From MTimeOutNotifier /*! @function TimerExpired @discussion Handle a timeout event */ void TimerExpired(); protected: // from CActive /*! @function DoCancel @discussion cancel any outstanding operation */ void DoCancel(); /*! @function RunL @discussion called when operation complete */ void RunL(); private: /*! @function CSocketsWriter @discussion Perform the first phase of two phase construction @param aEngineNotifier An observer for status reporting @param aSocket socket to read from */ CSocketsWriter(MEngineNotifier& aEngineNotifier, RSocket& aSocket); /*! @function ConstructL @discussion Perform the second phase construction of a CSocketsWriter */ void ConstructL(); /*! @function SendNextPacket @discussion Handle a 'write buffer empty' situation. */ void SendNextPacket(); private: // Member variables /*! @const The size of the write buffer in bytes */ enum { KWriteBufferSize = 1024 }; /*! @const The maximum time allowed for a write to complete */ static const TInt KTimeOut; /*! @enum TWriteState @discussion Records whether a write request is pending @value ESending A write request is pending with the socket server @value EWaiting The idle state for this object */ enum TWriteState { ESending, EWaiting }; /*! @var The socket to write to */ RSocket& iSocket; /*! @var An observer for status reporting */ MEngineNotifier& iEngineNotifier; /*! @var Accumulate data to send in here */ TBuf8 iTransferBuffer; /*! @var Holds data currently being sent to socket */ TBuf8 iWriteBuffer; /*! @var A timer used to cancel an outstanding write after a predefined timeout */ CTimeOutTimer* iTimer; /*! @var The timeout to use */ TInt iTimeOut; /*! @var The state of this active object */ TWriteState iWriteStatus; }; #endif // __SOCKETSWRITER_H__