ximpfw/core/srcprocessor/ximphostimp.h
changeset 0 e6b17d312c8b
child 21 cfd5c2994f10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ximpfw/core/srcprocessor/ximphostimp.h	Thu Dec 17 08:54:49 2009 +0200
@@ -0,0 +1,381 @@
+/*
+* Copyright (c) 2006 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:  Presence connection host
+ *
+*/
+
+#ifndef CPSCHOSTIMP_H
+#define CPSCHOSTIMP_H
+
+#include <e32base.h>
+#include <ximpprotocolconnectionhost.h>
+#include <ximpcontext.h>
+
+#include "ximpapiobjbase.h"
+#include "ximphost.h"
+#include "ximpoperationdefs.h"
+#include "ximprequestidbuilder.h"
+
+
+class CXIMPOperationBase;
+class CXIMPEventManager;
+class MXIMPObjectFactory;
+class CXIMPObjectFactoryImp;
+class CXIMPPscContext;
+class MPresenceDataCache;
+class CPresenceDataCache;
+class CXIMPContextStateEventImp;
+class CPeriodic;
+class MXIMPProtocolConnection;
+class CProtocolPresenceAuthorizationDataHostImp;
+class MProtocolPresenceAuthorizationDataHost;
+class CProtocolPresencePublishingDataHostImp;
+class MProtocolPresencePublishingDataHost;
+class CProtocolPresenceWatchingDataHostImp;
+class MProtocolPresenceWatchingDataHost;
+class CProtocolPresentityGroupsDataHostImp;
+class MProtocolPresentityGroupsDataHost;
+class CXIMPRestrictedCollectionImp;
+class CXIMPProtocolRequestCompleteEventImp;
+class MProtocolPresenceDataHost;
+class CProtocolPresenceDataHostImp;
+class MProtocolDataHost;
+
+
+/**
+ * Presence connection host.
+ *
+ * @lib ximpprocessor.lib
+ * @since S60 v3.2
+ */
+class CXIMPHost : public CXIMPApiObjBase,
+                 public MXIMPProtocolConnectionHost,
+                 public MXIMPHost
+
+    {
+public:
+    /** The class ID. */
+    enum { KClassId = XIMPIMP_CLSID_CXIMPPSCHOST };
+
+public:
+
+    IMPORT_C static CXIMPHost* NewLC( MXIMPProtocolConnection& aConnection, TInt32 aProtocolUid );
+
+    /**
+     * Mark a reference to this object.
+     */
+    void Open();
+
+    /**
+     * Remove a reference to this object.
+     * Once all references are removed, the class destroys itself.
+     */
+    void Close();
+
+protected:
+
+    /**
+     * Reference counted. Use Close to remove a reference, and Open to open it.
+     * Can't be CObject-derived, since already derives from another C-class.
+     */
+    virtual ~CXIMPHost();
+
+    CXIMPHost( MXIMPProtocolConnection& aConnection, TInt32 aProtocolUid );
+    void ConstructL();
+
+public: // From MXIMPBase
+
+    /**
+     * Implementation of MXIMPBase interface methods
+     * @see MXIMPBase
+     */
+    XIMPIMP_DECLARE_IF_BASE_METHODS
+
+
+public: // From MXIMPProtocolConnectionHost
+
+    void HandleRequestCompleted( TXIMPRequestId aReqId, TInt aResultCode );
+    void HandleRequestCompleted( TXIMPRequestId aReqId, MXIMPStatus* aResult );
+    void HandleRequestCompleted( TXIMPRequestId aReqId,
+                                 MXIMPStatus* aResult,
+                                 MXIMPBase* aParameter );
+    TXIMPRequestId HandleConnectionTerminated( MXIMPStatus* aReason );
+    MXIMPObjectFactory& ObjectFactory();
+    MProtocolPresenceDataHost& ProtocolPresenceDataHost();
+    
+
+   
+    void RegisterObserverL(
+            MXIMPProtocolConnectionHostObserver& aObserver,
+            const TArray<TInt32>* aEventFilter = NULL );
+    void UnregisterConnectionHostObserver(
+            MXIMPProtocolConnectionHostObserver& aObserver );
+
+
+public: // MXIMPHost
+
+    MXIMPProtocolConnection& GetConnection() const;
+
+    void AddEventL( CXIMPApiEventBase& aEvent, MXIMPPscContext* aContext  );
+    void ActivateEventL( CXIMPApiEventBase& aEvent, MXIMPPscContext* aContext );
+
+    void UnregisterSession( CXIMPPscContext* aContext );
+
+    void FakeCompleteRequest( TXIMPRequestId aReqId, TInt aResult );
+    void HandleAdaptationRequestCompleted( TXIMPRequestId aReqId, TInt aResult );
+    void HandleSessionMgmtRequestCompleted( TXIMPRequestId aReqId, TInt aResult );
+    void HandleInternalRequestCompleted( TXIMPRequestId aReqId, TInt aResult );
+
+    CProtocolPresenceDataHostImp& PresenceDataAccess();
+    
+
+    // get corresponding protocol host from the array of hosts
+    TAny* GetProtocolHost(TInt aInterfaceId) ;
+    
+/*    CPresenceDataCache& DataAccess();
+    CProtocolPresenceAuthorizationDataHostImp& AuthorizationDataAccess();
+    CProtocolPresencePublishingDataHostImp& PublishingDataAccess();
+    CProtocolPresenceWatchingDataHostImp& WatchingDataAccess();
+    CProtocolPresentityGroupsDataHostImp& GroupsDataAccess();
+*/
+    void AddNewOperationL( CXIMPOperationBase& aOperation );
+    TXIMPRequestId AddNewOperationL( CXIMPOperationBase* aOperation );
+
+    void ForcedTeardownL();
+
+    void StartCleanerTimer();
+    
+    TXIMPRequestId AddNewOperationL( 
+                TInt aOperation, MXIMPBase* aParam, MXIMPBase* aParam2 = NULL );    
+    TXIMPRequestId AddNewOperationL( 
+                TInt aOperation, CXIMPRestrictedObjectCollectionImp* aParams );
+    
+    TInt32 ProtocolUID( );
+    
+    // to set the specific prtocol hosts
+    void SetProtocolHosts();
+
+public: // New functions
+
+    void AddEventL( CXIMPApiEventBase& aEvent, CXIMPPscContext* aContext  );
+    void ActivateEventL( CXIMPApiEventBase& aEvent, CXIMPPscContext* aContext );
+
+
+    void RegisterSessionL( CXIMPPscContext* aContext );
+
+private:
+
+    /**
+     * Delete old operation and try to launch processing.
+     */
+    void StartProcessing();
+
+    /**
+     * Activate next operation for processing and start processing.
+     */
+    void ActivateProcessing();
+
+    /**
+     * Helper for completing the request, to avoid cyclical
+     * call chain from StartProcessingL to HandleRequestCompleted and back.
+     * @param aResult The error code
+     * @see HandleRequestCompleted
+     */
+    void CompleteRequest( TXIMPRequestId aReqId );
+
+    /**
+     * Callback method for process starting.
+     */
+    static TInt StartProcessCallback( TAny *aInstance );
+
+    /**
+     * Leaving version of Callback method for process starting.
+     */
+    void DoStartProcessCallback();
+
+    /**
+     * Callback method for request complete.
+     */
+    static TInt CompleteRequestCallback( TAny *aInstance );
+    static TInt CompleteAdaptationRequestCallback( TAny* aInstance );
+    static TInt CompleteSessionMgmtRequestCallback( TAny* aInstance );
+    static TInt CompleteInternalRequestCallback( TAny* aInstance );
+
+    /**
+     * Leaving version of Callback method for request complete.
+     */
+    void DoCompleteRequestCallback();
+    void DoCompleteAdaptationRequestCallback();
+    void DoCompleteSessionMgmtRequestCallback();
+    void DoCompleteInternalRequestCallback();
+
+    /**
+     * Callback for timer cleaner
+     * @see TCallBack
+     */
+    static TInt CleanerCallback( TAny* aMyself );
+
+    /**
+     * Actual callback called from CleanerCallback.
+     */
+    void DoCleanerCallback();
+
+    /**
+     * Leaving version of cleaner timer callback.
+     */
+    void DoCleanerCallbackL();
+    
+    /**
+     * This panics if active operation is not found for requestid.
+     */
+    CXIMPOperationBase& OperationForRequestId( TXIMPRequestId aReqId );
+
+    TXIMPRequestId AddNewOperationL( NXIMPOps::TXIMPOpTypes aOpType );
+    
+     /**
+     * This is to load all the protocol hosts 
+     */
+    void LoadDataHostArrayL() ;
+    
+private: // data
+
+    /**
+     * iConnection
+     */
+    MXIMPProtocolConnection& iConnection;
+
+    /**
+     * Uid for protocol to use for request id builder
+     */
+    TInt32 iProtocolUid;
+    
+    /**
+     * Reference counter
+     */
+    TInt iReferences;
+
+    /**
+     * State identifier
+     */
+     TBool iProcessing;
+
+    /**
+     * Container for the operations. Owns the operations.
+     * Own.
+     */
+    RXIMPObjOwningPtrArray< CXIMPOperationBase > iOperations;
+
+    TBool iRunFromContextActivated;
+    CXIMPOperationBase* iCurrentOperation;
+
+    // not owned
+
+    CXIMPEventManager* iEventManager;
+
+
+    /**
+     * Container for session datas that are registered to this
+     * host.
+     * Shared ownership. Cleanup for items must be done with close method. Not delete.
+     */
+    RPointerArray< CXIMPPscContext > iRegSessions;
+
+    /**
+     * Internal state of the host
+     */
+    NXIMPHost::THostStates iState;
+
+    /**
+     * Timer for clean operation creation.
+     */
+    CPeriodic* iCleanerTimer;
+
+    /**
+     * Object factory.
+     */
+    CXIMPObjectFactoryImp*  iObjFactory;
+
+    /**
+     * Data cache
+     */
+//    CPresenceDataCache* iDataCache;
+
+    /**
+     * Data hosts
+     */
+     
+    CProtocolPresenceDataHostImp* iPresenceDataHost;
+    
+    /**
+     * array to hold data hosts
+     */
+    CArrayFixFlat<MProtocolDataHost*>* iDataHostArray;
+    
+/*    CProtocolPresenceAuthorizationDataHostImp* iAuthDataHost;
+    CProtocolPresencePublishingDataHostImp* iPublishingDataHost;
+    CProtocolPresenceWatchingDataHostImp* iWatchingDataHost;
+    CProtocolPresentityGroupsDataHostImp* iGroupsDataHost;
+*/
+    /**
+     * Operation index for host-originated operations
+     * (currently only reconnect operation)
+     */
+    TInt iHostOriginatedOpIndex;
+
+    /**
+     * Active object for async calls.
+     */
+    //CAsyncCallBack* iCallBack;
+    enum
+        {
+        ECompleteRequestCallback = 0,
+        ECompleteAdaptationRequestCallback,
+        ECompleteSessionMgmtRequestCallback,
+        ECompleteInternalRequestCallback,
+        EStartProcessCallback
+        };
+    RPointerArray< CAsyncCallBack > iCallBack;
+
+    /**
+     *
+     */
+    TInt iAdaptationOperationIndex;
+
+
+    /**
+     * Builder for TXIMPRequestIds. Owned.
+     */
+    TXIMPRequestIdBuilder iReqIdBuilder;
+    
+    /**
+     * Observers for adaptation requests.
+     */
+    RPointerArray< MXIMPProtocolConnectionHostObserver > iConnectionHostObservers;
+    
+    
+    /**
+     * Adaptation request complete event.
+     */
+    CXIMPProtocolRequestCompleteEventImp* iAdaptationReqCompleteEvent;
+    
+    /**
+     * Forced tear down flag.
+    */
+    
+    TBool iForcedTearDown;
+    };
+
+
+#endif // CPSCHOST_H
+