textinput/peninputarc/inc/pensrvcliinc/peninputserversession.h
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/inc/pensrvcliinc/peninputserversession.h	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,284 @@
+/*
+* Copyright (c) 2005-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:  header file for peninput session
+*
+*/
+
+
+
+
+#ifndef C_CPENINPUTSESSION_H
+#define C_CPENINPUTSESSION_H
+
+//  INCLUDES
+#include <e32base.h>
+#include "peninputcmdparam.h"
+
+class CPeninputServer;
+class RMessage2;
+
+
+/**
+ * This class represents a session in the server.
+ *
+ * Functions are provided to respond appropriately to client messages
+ *
+ * @since S60 v4.0
+ */
+NONSHARABLE_CLASS(CPeninputServerSession) : public CSession2
+    {
+public: 
+    // Constructors and destructor
+    /**
+     * Constructor.
+     *
+     * @since S60 v4.0
+     * @param aClient reference to client thread
+     * @param aServer pointer to CPeninputServer
+     */
+    CPeninputServerSession(RThread &aClient, CPeninputServer& aServer);
+    
+    /**
+     * Destructor.
+     *
+     * @since S60 v4.0
+     */
+    ~CPeninputServerSession();
+    
+    /**
+     * Static initializer.
+     *
+     * @since S60 v4.0
+     * @param aClient reference to client thread
+     * @param aServer pointer to CPeninputServer
+     * @return Sever session created
+     */
+    static CPeninputServerSession* NewL(RThread &aClient, 
+    											CPeninputServer& aServer);
+
+    /**
+     * Signals the client with the given code, if the client has
+     * registered as observer.
+     *
+     * @since S60 v4.0
+     * @param aSignalCode The event code
+     * @param aEventData The event data
+     * @return ETrue if client was signalled succesfully, EFalse otherwise.
+     */
+    TBool SignalClientL(TInt aSignalCode,const TDesC& aEventData);
+
+    /**
+     * Signals the client that UI is activated or deactivaed.
+     *
+     * @since S60 v4.0
+     * @param aSignalCode The event code
+     * @param aType pen ui type associated with this event
+     * @return ETrue if client was signalled succesfully, EFalse otherwise.
+     */
+    TBool SignalUiActivationObserver(TInt aSignalCode,TInt aType);
+    
+    
+    /**
+     * Handling pending event before this session is closed.
+     *
+     * @since S60 v4.0
+     */    
+    void ProcessPendingEventBeforeExit();
+    
+    /*
+     * Returns id of the application thread that created this session.
+     *
+     * @since S60 v4.0
+     * @return client thread id
+     */
+    TInt ClientId();
+    
+    /**
+     * Increase the delayed command count
+     *
+     * @since S60 v4.0
+     */    
+    void AddDelayedCmd();
+    
+
+    /**
+     * Regiseter the ui type to be monitored.
+     *
+     * @since S60 v4.0
+     * @aType The ui type to be monitored.
+     */    
+    void RegisterPenUiType(TInt aType);
+    
+    /**
+     * Panic client
+     *
+     * @since S60 v4.0
+     * @param aMessage The client message
+     * @param aPanic panic code
+     */
+    static void PanicClient(const RMessage2& aMessage ,TInt aPanic );    
+
+    // from base classes CSession2
+
+    /**
+     * From CSession2.
+     * handle client request
+     *
+     * @since S60 v4.0
+     * @param aMessage The client request message
+     */
+    virtual void ServiceL( const RMessage2 &aMessage );
+    
+    /**
+     * To get disabled layouts for the session of RMessage
+     *
+     * @since S60 v6.0
+     * @param aDisabledLayouts The disabled mode to set
+     */   
+    const TProcessId& ClientProcessId();
+    TInt DisabledUiType();
+    
+    TInt DoUpdateAppInfo();
+    
+    inline TBool DsaEverHappened() const;
+private:    // New functions
+    /**
+     * 2nd phase constuctor
+     *
+     * @since S60 v4.0
+     */
+    void ConstructL();
+    
+    /**
+     * handle client request
+     *
+     * @since S60 v4.0
+     * @param aMessage The client request message
+     * @return The operation result code
+     */
+    TInt DoServiceL( const RMessage2 &aMessage );
+
+
+    /**
+     * Remove the given event data
+     *
+     * @since S60 v4.0
+     * @param aIndex The event to be remvoed. If aIndex < 0, all events
+     * are removed.
+     */
+    void RemoveEventDataByIdx(TInt aIndex);
+    
+    /**
+     * Save data and complete the pending request
+     *
+     * @since S60 v4.0
+     * @param aSignalCode The event code
+     * @param aEventData The event data
+     * @param aPos The event data position. if -1, then append to the end.
+     * @return ETrue if OK.
+     */    
+    TBool CompletePendingRequestL(TInt aSignalCode,const TDesC& aEventData,
+                                                            int aPos = -1);
+    
+    TInt HandleAppInfoChange(const RMessage2& aMessage);
+    TInt HandleAppInfoChangeL(const RMessage2& aMessage);
+    /**
+     * Build the event buf to send to client. 
+     * It checks whether we can combine several events data together to send in one round.
+     *
+     * @since S60 v5.0
+     * @return The number of combined event. -1 if there is no memory to build data buffer.
+     */        
+    TInt BuildEventData();
+    
+    /**
+     * Remove the given number of event data
+     *
+     * @since S60 v5.0
+     * @param aNum The number of events to be remvoed.
+     */    
+    void RemoveEventDatas(TInt aNum);
+    
+    /**
+     * Send the event data via the given message.
+     *
+     * @since S60 v5.0
+     * @return KErrNone if succefully, otherwise returns the length needed for msg buf.
+     */                
+    TInt SendEventData(const RMessage2& aMessage, const TDesC& aData);
+private:    // Data
+
+    /** 
+     * Reference to PENINPUT server 
+     */
+    CPeninputServer& iPenInputSvr;  
+
+    /** 
+     * Each client can have one pending request which is issued with function 
+     * RequestMessageNotification and is signalled when the client has to switch
+     * FEP or launch help application. Pointer not owned.
+     */
+    RMessage2 iPendingRequest;
+
+    /**
+     * Flag to indicate whether client has issued a notification request.
+     */ 
+    TBool iObserverActive;
+
+    /** 
+     * Id of the client thread for debugging purposes 
+     */
+    TInt iClientId;    
+    
+    /** 
+     * Delayed command count for this session 
+     */    
+    TInt iDelayedCmd;
+    
+    /**
+     * The pen ui type to be monitored
+     */ 
+    TInt iRegistedPenUiType;    
+
+    /**
+     * event code array
+     */
+    RArray<TInt> iSignalCodeArray;
+
+    /**
+     * session data buffer 
+     * Own
+     */
+    RPointerArray<HBufC> iDataBuf;    
+    
+    RBuf iCombinedEventBuf;    
+    TInt iCombinedMsgNum;
+    
+    TInt iCombinedEventId;    
+    
+    TProcessId iClientProcess;
+    
+    HBufC* iAppInfo;
+    
+    TPeninputAppInfo iAppInfoType;
+    TInt iDisabledUiType;
+    TBool iDsaEverHappened;
+    };
+#endif //C_CPENINPUTSESSION_H
+
+inline TBool CPeninputServerSession::DsaEverHappened() const
+	{
+	return iDsaEverHappened;
+	}
+// End of File