diff -r 000000000000 -r 094583676ce7 wvuing/wvuieng/EngSrc/CCAMessageHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuieng/EngSrc/CCAMessageHandler.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,272 @@ +/* +* Copyright (c) 2005 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: Handler class for incoming and outgoing messages +* +*/ + + +#ifndef __CCAMESSAGEHANDLER_H__ +#define __CCAMESSAGEHANDLER_H__ + + +#include "ImpsImCli.h" // MImpsImHandler2 +#include "MCAMessageObserver.h" +#include "MCAMessageErrorInformer.h" +#include "MCAContentProcessObserver.h" +#include "MCAMessageCreator.h" // For SMessageData + +// FORWARD CLASS DECLERATIONS +class MCAChatInterface; +class MCAMessageUtils; +class MCAMessagesReadInterface; +class MCAImpsFactory; +class MCAImpsImClient; + +// CLASS DECLARATION + +/** + * Handler class for incoming and outgoing messages + * + * @lib CAEngine.dll + * @since 3.0 + */ + +class CCAMessageHandler : public CBase, + public MImpsImHandler2, + public MCAMessageObserver, + public MCAMessageErrorInformer, + public MCAContentProcessObserver + { + public: // Construction + + /** + * Construction + * @param aChatInterface Access to message read and write interfaces + * @param aMessageUtils Access to message utils ( Message creator, + * processors ) + * @param aImpsFactory Factory for IMPS interface wrappers + * @return Pointer to new created instance of CCAMessageCreator + */ + static CCAMessageHandler* NewL( MCAChatInterface& aChatInterface, + MCAMessageUtils& aMessageUtils, + MCAImpsFactory* aIMPSFactory ); + + /** + * Construction + * @see CCAMessageHandler::NewL + */ + static CCAMessageHandler* NewLC( MCAChatInterface& aChatInterface, + MCAMessageUtils& aMessageUtils, + MCAImpsFactory* aIMPSFactory ); + + /** + * Destruction + */ + ~CCAMessageHandler(); + + private: // Construction + + /** + * Constructor + * @see CCAMessageHandler::NewL + */ + CCAMessageHandler( MCAChatInterface& aChatInterface, + MCAMessageUtils& aMessageUtils, + MCAImpsFactory* aIMPSFactory ); + + /** + * Constructor + */ + void ConstructL(); + + private: // From MImpsImHandler + + /** + * @see MImpsImHandler2 + */ + void HandleNewTextMessageL( TInt aOpId, + const TDesC& aMessageId, + const TDesC& aSender, + const TDesC& aGroupId, + const MDesCArray& aRecipients, + const MDesCArray& aScreenNames, + const TDesC& aText, + TImpsCspIdentifier& aCspId ); + /** + * @see MImpsImHandler2 + */ + void HandleNewContentMessageL( TInt aOpId, + const TDesC& aMessageId, + const TDesC& aSender, + const TDesC& aGroupId, + const MDesCArray& aRecipients, + const MDesCArray& aScreenNames, + const TDesC& aContentType, + const TDesC8& aContent, + TImpsCspIdentifier& aCspId ); + /** + * @see MImpsImHandler2 + */ + void HandleSendCompleteL( TInt aOpId, + TBool aDeliveryReportOrdered, + TImpsCspIdentifier& aCspId ); + /** + * @see MImpsImHandler2 + */ + void HandleDeliveryReportL( const TDesC& aMessageId, + TInt aResult, + const TDesC* aDescription, + TImpsCspIdentifier& aCspId ); + + private: // From MCAMessageObserver + + /** + * @see MCAMessageObserver + */ + void HandleMessageEvent( TMessageEventType aEvent, TInt aIndex ); + + private: // From MCAMessageErrorInformer + + /** + * @see MCAMessageErrorInformer + */ + void RegisterObserver( MCAMessageErrorObserver* aObserver ); + + /** + * @see MCAMessageErrorInformer + */ + void UnregisterObserver( MCAMessageErrorObserver* aObserver ); + + private: // From MCAContentProcessObserver + + /** + * @see MCAContentProcessObserver + */ + void HandleProcessingComplete( MCAContentProcessor& aProcessor, + MCAMessage& aMessage, + TInt aStatus ); + + public: // New methods + + /** + * Handle sent message. + * @param aStatus, Status of operation + * @param aOperationCode. Operation code to identify message. + * @param aSuccess ETrue, if message sent ok. EFalse if not. + */ + void HandleMessageSentL( TInt aStatus, TInt aOperationCode, + TBool aSuccess ); + + /** + * Set state of local echo in group. + */ + void SetLocalEchoInGroup( TBool aLocalEchoInGroup ); + + private: // New helper methods + + /** + * Callback method for CIdle + * @param aInstance Instance of CCAMessageHandler + * @return ETrue, if more messages, EFalse if last one. + */ + static TInt SendMessage( TAny *aInstance ); + + /** + * Send one message + * @return ETrue, if more messages, EFalse if last one. + */ + TInt DoSendMessage(); + + /** + * Handle new message. + * @param aData. Data of message. + */ + void HandleNewMessageL( MCAMessageCreator::SMessageData& aData ); + + /** + * Notify observers about + * @param aStatus, Error code + * @param aMessage, Message that failed. + */ + void NotifyMessageError( TInt aStatus, MCAMessage* aMessage ); + + /** + * Get next holding message if exists. + * @return Next holding message if exists. NULL if not. + */ + MCAMessage* NextHoldingMessage(); + + /** + * Is holding needed for message. If it is, appended to holding. + * @param aMessage. Checked message + * @return ETrue, if appended to holding EFalse if not. + */ + TBool AppendedToHoldingL( MCAMessage& aMessage ); + + /** + * Send message to server + * @param aMessage. Message to sent. + * @return Operation code. + */ + TInt SendMessageToServerL( MCAMessage& aMessage ); + + /** + * Handle message sent failed. Create failed message and notify user. + * @param aMessage. Failed message + * @param aError, Error code for fail. + */ + void HandleMessageSentFailedL( MCAMessage& aMessage, TInt aError ); + + /** + * Show message to user who sent it. + * @param aMessage. Sent message to echo. + */ + void LocalEchoMessageL( MCAMessage& aMessage ); + + private: // Member data + + /// does not own. This is used for example to get message creator + MCAMessageUtils& iMessageUtils; + + /// Does not own. Access to message containers + MCAChatInterface& iChatInterface; + + /// Does not own. Access to messages in send buffer + MCAMessagesReadInterface* iSendBuffer; + + // not owned + MCAImpsFactory* iImpsFactory; + + // not owned + MCAImpsImClient* iImpsImClient; + + /// Idle for message sending purposes. Owns. + CIdle* iIdle; + + /// Message error observers + RPointerArray< MCAMessageErrorObserver > iErrorObservers; + + /// Messages which are processed before sending. + RPointerArray< MCAMessage > iHoldingMessages; + + /// Is local echo in groups used. + TBool iLocalEchoInGroup; + + /// If send is active, do not start it again. + TBool iSendLaunchLock; + }; + +#endif // CCAMESSAGEHANDLER_H + +// End of File