/** Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved.* This component and the accompanying materials are made available* under the terms of "Eclipse Public License v1.0"* which accompanies this distribution, and is available* at the URL "http://www.eclipse.org/legal/epl-v10.html".** Initial Contributors:* Nokia Corporation - initial contribution.** Contributors:** Description: * Base class for client side event handlers.**/#ifndef IMPSHANDLER_H#define IMPSHANDLER_H// INCLUDES#include <e32base.h>#include "impspacked.h"#include "impsclientsrv.h"#include "impshandlertimer.h"// FORWARD DECLARATIONSclass RImpsClient2;class MImpsStatusHandler2;class MImpsErrorHandler2;class CImpsFields;// CLASS DECLARATION// -----------------------------------------------------------------------------// TWvBuf::CWvBuf// -----------------------------------------------------------------------------class TWvBuf { public: /** * Constructor * @param aBuf data buffer */ TWvBuf( HBufC8* aBuf ); public: TPtr8 iPtr; // pointer to the buffer };/*** Abstract base class for WV event handlers.*/class CImpsHandler2 :public CActive { public: // Constructors and destructor /** * Destructor. */ virtual ~CImpsHandler2(); public: // New functions /** * Start the execution. Ready to get messages after that. */ void StartRun(); /** * Session status handler accessor * @return status event handler */ inline MImpsStatusHandler2* StatusHandler(); /** * Session status handler mutator. * Registers status to server too. * @param aObserver status event observer */ void SetStatusHandlerL( MImpsStatusHandler2* aObserver ); /** * Error handler accessor * @return error handler */ inline MImpsErrorHandler2* ErrorHandler(); /** * Error handler mutator. * Registers status to server too. */ void SetErrorHandlerL( MImpsErrorHandler2* aObserver ); /** * Request event message body from the server */ void EventHandled(); private: // New functions /** * Read message from server thread * @param aLength data length to be read * @return ETrue if message read complete, no need to read body separately */ TBool ReadDataL( TInt aLength ); /** * Request event message body from the server */ void EventBody(); /** * Reset IPC buffer */ void ResetBuffers(); /** * Current event message buffer size * @return buffer size */ inline TInt CurrentSize() const; protected: // New functions /** * Actual construction. */ void ConstructL(); /** * Call appropriate observer * @param aErrorFields used if error case. NULL or ImpsFields structure * */ virtual void HandleEventL( CImpsFields* aErrorFields )=0; /** * Detailed error handling * @param aOpCode operation-id * @param aStatus error code * @param aFields error data */ void HandleErrorEventL( TInt aOpCode, TInt aStatus, CImpsFields* aFields); /** * Registers base class observer for session status change observer */ void DoRegisterStatusHandlerL( ); /** * Unregisters base class observer for session status change observer */ void DoUnregisterStatusHandlerL( ); /** * Registers base class observer for detailed error observer */ void DoRegisterErrorHandlerL( ); /** * Unregisters base class observer for detailed error observer */ void DoUnregisterErrorHandlerL( ); protected: /** * C++ constructor */ CImpsHandler2( TInt aPriority, RImpsClient2& aClient ); protected: // Functions from base classes /** * From CActive */ void RunL(); /** * From CActive */ void DoCancel(); protected: // Data // Message header area TBuf<sizeof(SImpsEventData)> iEventData; // Client interface reference who is using this object RImpsClient2& iClient; // Pointer to registered online status observer MImpsStatusHandler2* iStatusHandler; // Pointer to registered detailed error observer MImpsErrorHandler2* iErrorHandler; // Internal message data structure CImpsFields* iFields; private: // Data // Pointer to stack variable to detect the deletion of the heap // instance. This case takes place if a client // calls Unregister in observer method. TBool* iDestroyedPtr; // IPC buffers and auxiliary classes TIpcArgs iArgs; HBufC8* iBody; TWvBuf* iPtrStore; // Timer for server busy situations CImpsHandlerTimer* iBusyTimer; };inline MImpsStatusHandler2* CImpsHandler2::StatusHandler() { return iStatusHandler; }inline MImpsErrorHandler2* CImpsHandler2::ErrorHandler() { return iErrorHandler; }inline TInt CImpsHandler2::CurrentSize() const { return iBody ? iBody->Des().MaxSize() : 0; }#endif // End of File