--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/inc/cfserver/CFMessageHandlerContext.h Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2006-2008 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: Message handler for contexts.
+ *
+*/
+
+
+#ifndef C_CFMESSAGEHANDLERCONTEXT_H
+#define C_CFMESSAGEHANDLERCONTEXT_H
+
+#include "CFMessageHandlerBase.h"
+#include "cfcontextobject.h"
+#include "cfcontextsourceinterface.h"
+
+class CCFContextIndicationImpl;
+class CCFContextSubscription;
+class CCFContextQuery;
+class CCFContextObjectImpl;
+class CCFContextSourceCommand;
+
+/**
+ * Context Framework server session message handler base class.
+ */
+NONSHARABLE_CLASS( CCFMessageHandlerContext ):
+public CCFMessageHandlerBase,
+public MCFContextSubscriptionListener, public MCFContextSource
+ {
+private:
+
+ // Subscription error
+ struct TSubscriptionError
+ {
+ TInt iError;
+ CCFContextObjectImpl* iContext;
+ };
+
+public:
+
+ // Two phased constructors
+ static CCFMessageHandlerContext* NewL( MCFExtendedContextInterface& aCF,
+ MCFActionInterface& aActivatorEngine,
+ MCFScriptInterface& aScriptInterface );
+ static CCFMessageHandlerContext* NewLC( MCFExtendedContextInterface& aCF,
+ MCFActionInterface& aActivatorEngine,
+ MCFScriptInterface& aScriptInterface );
+
+ // Destructor
+ ~CCFMessageHandlerContext();
+
+protected: // From base classes
+
+ // From CCFMessageHandlerBase
+ TBool HandleMessageL( const RMessage2& aMessage );
+
+ // From MCFContextSubscriptionListener
+ void ContextIndicationL( CCFContextIndication* aIndication );
+
+ // From MCFContextSubscriptionListener
+ TInt Client( RThread& aThread ) const;
+
+ // From MCFContextSubscriptionListener
+ void HandleContextSubscriptionError( TInt aError,
+ const TDesC& aSource,
+ const TDesC& aType );
+
+private: // from MCFContextSource
+
+ // from MCFContextSource
+ void Subscribers( const TDesC& aContextSource,
+ const TDesC& aContextType );
+
+ // from MCFContextSource
+ void NoSubscribers( const TDesC& aContextSource,
+ const TDesC& aContextType );
+
+ // from MCFContextSource
+ void HandleCommand( const CCFContextSourceCommand& aCommand );
+
+private: // New methods
+
+ // Publishes a context
+ TInt PublishContext( CCFContextObject& aContext,
+ RThread& aClientThread );
+
+ // Adds a new subscription to CF
+ TInt AddSubscription( CCFContextSubscription* aSubscription,
+ RThread& aClientThread );
+
+ // Removes subscription
+ void RemoveSubscription(CCFContextSubscription& aSubscription);
+
+ // Starts receiving context indication
+ void ReceiveContextIndicationMessageL( const RMessage2& aMessage );
+
+ // Cancels receive context indication message
+ void CancelReceiveContextIndicationMessage();
+
+ // Requests context
+ TInt RequestContext( CCFContextQuery& aContextQuery,
+ RThread& aClientThread );
+
+ // Indicate subscription error
+ void IndicateSubscriptionErrorL();
+
+ // Get next indication from queue
+ void CompleteNextIndicationFromQueueL( const RMessage2& aMessage );
+
+ // Checks context indication queue
+ void CheckContextIndicationQueueL();
+
+ // Write context request buffer into stream
+ void CompleteRequestContextL( const RMessage2& aMessage );
+
+ // Handles error situations
+ void DoHandleContextSubscriptionErrorL( TInt aError,
+ const TDesC& aSource,
+ const TDesC& aType );
+
+private: // new message system
+
+ void ReceiveMessageL( const RMessage2& aMessage );
+
+ // Cancels receive message
+ void CancelReceiveMessage();
+
+ void CompleteNextMessageFromQueueL( const RMessage2& aMessage );
+
+ void CheckMessageQueueL();
+
+ // Leavable version from subscribers callback
+ void SubscribersL( const TDesC& aContextSource, const TDesC& aContextType );
+
+ // Leavable version from no subscribers callback
+ void NoSubscribersL( const TDesC& aContextSource, const TDesC& aContextType );
+
+ // Leavable version from handle command callback
+ void HandleCommandL( const CCFContextSourceCommand& aCommand );
+
+private:
+
+ CCFMessageHandlerContext( MCFExtendedContextInterface& aCFContext,
+ MCFActionInterface& aCFAction,
+ MCFScriptInterface& aScriptInterface );
+ void ConstructL();
+
+private: // Data
+
+ // Receive message
+ RMessage2 iReceiveMessage;
+
+ // Context request buffer
+ RContextObjectArray iContextRequestBuffer;
+
+ // Context indication queue
+ RPointerArray<CCFContextIndicationImpl> iIndicationQueue;
+
+ // Own: Subscription errors
+ RArray<TSubscriptionError> iSubscriptionErrors;
+
+ // Receive message for context source related messages
+ RMessage2 iReceiveContextSourceMsg;
+
+ // Own: array of messages to client
+ RPointerArray<HBufC8> iMessageQueue;
+ };
+
+#endif