--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sensorservices/sensorserver/inc/server/sensrvtransaction.h Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,333 @@
+/*
+* 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: Sensor server transaction base class
+*
+*/
+
+
+#ifndef SENSRVTRANSACTION_H
+#define SENSRVTRANSACTION_H
+
+#include <e32base.h>
+#include "sensrvmessage.h"
+
+class CSensrvSession;
+class CSensrvProxyManager;
+class CSensrvPluginProxy;
+class CSensrvChannel;
+
+/**
+ * Base class for Sensor Server transactions
+ *
+ * @since S60 5.0
+ */
+class CSensrvTransaction : public CBase
+ {
+ public:
+
+ /**
+ * Transaction types
+ *
+ * Mediator transactions are never owned by transaction queues and are reused,
+ * even if the regular transactions are not. They are used for passing events
+ * internally between SSY and Server main thread.
+ */
+ enum TSensrvTransactionType
+ {
+ ETransTypeNone, ///< Uninitialized type.
+ ETransTypeLoadSsy = 1, ///< Loads SSY.
+ ETransTypeDelayedInitialize, ///< Reloads plugin after unloading is complete
+ ETransTypeDelayedOpenChannel, ///< Reattempts Open channel after loading is complete
+ ETransTypeClientQueryChannels, ///< Waiting transaction for channel info queries
+ ETransTypeOpenChannel, ///< Opens channel
+ ETransTypeCloseChannel, ///< Closes channel
+ ETransTypeStartListening, ///< Starts listening to a channel
+ ETransTypeStopListening, ///< Stops listening to a channel
+ ETransTypeGetProperty, ///< Gets single property of a channel
+ ETransTypeGetAllProperties, ///< Gets all properties of a channel
+ ETransTypeSetProperty, ///< Sets single property of a channel
+ ETransTypeStartConditionListening, ///< Starts condition listening
+ ETransTypeStopConditionListening, ///< Stops condition listening
+ ETransTypeMediatorFirst = 10000, ///< Just here to indicate first internal transaction.
+ ETransTypeMediatorNewDataAvailable, ///< SSY mediator notifies channel about new data with this transaction.
+ ETransTypeMediatorForceBufferFilled, ///< Channel listener notifies SSY that buffer fill needs to be forced.
+ ETransTypeMediatorForceChannelClose, ///< SSY mediator notifies channel that it needs to be closed because of error situation.
+ ETransTypeMediatorPropertyChanged, ///< SSY mediator notifies channels about changed property.
+ ETransTypeMediatorChannelsChanged ///< SSY mediator notifies proxy about channel registration
+ };
+
+ /**
+ * Transactino states
+ */
+ enum TSensrvTransactionState
+ {
+ ETransStateUninitialized, ///< Initial state of transaction
+ ETransStateQueued, ///< Transaction has been queued
+ ETransStateExecuting, ///< Transaction is executing
+ ETransStateHandledAtSsy, ///< Transaction has been handled at SSY.
+ ETransStateNotifyFailed, ///< Transaction notifying to a mediator failed
+ ETransStateCompleted ///< Transaction has been completed and will be deleted shortly.
+ };
+
+ /**
+ * Channel open message data
+ */
+ class TChannelOpenMessageData
+ {
+ public:
+ inline TChannelOpenMessageData( TInt aMaxBufferingCount, TInt aDataItemSize ) :
+ iMaxBufferingCount(aMaxBufferingCount), iDataItemSize(aDataItemSize) {}
+
+ TInt iMaxBufferingCount;
+ TInt iDataItemSize;
+ };
+
+ /**
+ * Two phase constructor
+ *
+ * @since S60 5.0
+ * @param aMessage The message related to this transaction.
+ * Can be NULL if transaction has no client.
+ * Ownership of the message passes to this transaction.
+ * @param aProxy The plugin proxy related to this transaction.
+ * Can be NULL if transaction is not related to a single proxy.
+ * @param aChannel The channel related to this transaction.
+ * Can be NULL if transaction is not related to a channel.
+ * @param aType The transaction type.
+ * @return New CSensrvTransaction instance
+ * @exception KErrNoMemory Out of memory
+ */
+ static CSensrvTransaction* NewL(CSensrvMessage* aMessage,
+ CSensrvPluginProxy* aProxy,
+ CSensrvChannel* aChannel,
+ TSensrvTransactionType aType);
+
+ /**
+ * Two phase constructor, leaves newly created object to cleanupstack.
+ *
+ * @since S60 5.0
+ * @param aMessage The message related to this transaction.
+ * Can be NULL if transaction has no client.
+ * Ownership of the message passes to this transaction.
+ * @param aProxy The plugin proxy related to this transaction.
+ * Can be NULL if transaction is not related to a single proxy.
+ * @param aChannel The channel related to this transaction.
+ * Can be NULL if transaction is not related to a channel.
+ * @param aType The transaction type.
+ * @return New CSensrvTransaction instance
+ * @exception KErrNoMemory Out of memory
+ */
+ static CSensrvTransaction* NewLC(CSensrvMessage* aMessage,
+ CSensrvPluginProxy* aProxy,
+ CSensrvChannel* aChannel,
+ TSensrvTransactionType aType);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSensrvTransaction();
+
+ /**
+ * Completes the transaction and related message, if any.
+ *
+ * @since S60 5.0
+ */
+ void Complete();
+
+ /**
+ * Gets session related to this transaction.
+ *
+ * @since S60 5.0
+ * @return Session pointer. NULL if transaction has no client.
+ */
+ inline CSensrvSession* Session() const { return iMessage ? iMessage->Session() : NULL; };
+
+ /**
+ * Gets message related to this transaction.
+ *
+ * @since S60 5.0
+ * @return Message pointer. NULL if transaction has no client.
+ */
+ inline CSensrvMessage* Message() const { return iMessage; };
+
+ /**
+ * Gets the plugin proxy related to transaction.
+ *
+ * @since S60 5.0
+ * @return Related proxy. NULL if transaction is not related to a single proxy.
+ */
+ inline CSensrvPluginProxy* Proxy() const { return iProxy; };
+
+ /**
+ * Gets related channel pointer.
+ *
+ * @since S60 5.0
+ * @return Pointer to related channel. NULL if transaction is not related to a channel.
+ */
+ inline CSensrvChannel* Channel() const { return iChannel; };
+
+ /**
+ * Gets the transaction type.
+ *
+ * @since S60 5.0
+ * @return Transaction type.
+ */
+ inline TSensrvTransactionType Type() const { return iType; };
+
+ /**
+ * Checks if transaction is a mediator transaction.
+ *
+ * @since S60 5.0
+ * @return ETrue if transaction is a mediator transaction
+ */
+ inline TBool IsMediatorType() const { return iType > ETransTypeMediatorFirst ? ETrue : EFalse; };
+
+ /**
+ * Gets transaction timestamp.
+ *
+ * @since S60 5.0
+ * @return TTime Transaction creation timestamp
+ */
+ inline const TTime& TimeStamp() const { return iTimeStamp; };
+
+ /**
+ * Resets transaction timestamp to current time.
+ *
+ * @since S60 5.0
+ * @return TTime New transaction timestamp
+ */
+ inline const TTime& ResetTimeStamp() { iTimeStamp.HomeTime(); return iTimeStamp; };
+
+ /**
+ * Gets transaction error.
+ *
+ * @since S60 5.0
+ * @return Error code.
+ */
+ inline TInt ErrorCode() const { return iErrorCode; };
+
+ /**
+ * Gets transaction state.
+ *
+ * @since S60 5.0
+ * @return Transaction state.
+ */
+ inline TInt State() const { return iState; };
+
+ /**
+ * Sets transaction state.
+ *
+ * @since S60 5.0
+ * @param aState The new state for transaction.
+ */
+ void SetState(TSensrvTransactionState aState);
+
+ /**
+ * Sets data to message to be returned to client.
+ *
+ * @since S60 5.0
+ * @param aData Data to set to the message.
+ * How TAny pointer is interpreted depends on transaction type:
+ * ETransTypeClientQueryChannels - RSensrvChannelInfoList*,
+ * ETransTypeOpenChannel - TChannelOpenMessageData*
+ * @return KErrBadHandle Message is NULL.
+ * KErrBadDescriptor Message parameters are not descriptor type.
+ * KErrOverflow Message descriptor too small.
+ */
+ TInt SetMessageData(TAny* aData);
+
+ /**
+ * Sets transaction error.
+ *
+ * @since S60 5.0
+ * @param aErrorCode Error code
+ */
+ void SetErrorCode(TInt aErrorCode);
+
+ /**
+ * Extracts message from transaction.
+ * Message completion responsibility transfers to caller.
+ *
+ * @since S60 5.0
+ * @return The message previously owned by transaction.
+ */
+ CSensrvMessage* ExtractMessage();
+
+ private:
+
+ /**
+ * C++ constructor
+ *
+ * @since S60 5.0
+ * @param aMessage The message related to this transaction.
+ * Can be NULL if transaction has no client.
+ * @param aProxy The plugin proxy related to this transaction.
+ * Can be NULL if transaction is not related to a single proxy.
+ * @param aChannel The channel related to this transaction.
+ * Can be NULL if transaction is not related to a channel.
+ * @param aType The transaction type.
+ */
+ CSensrvTransaction(CSensrvMessage* aMessage,
+ CSensrvPluginProxy* aProxy,
+ CSensrvChannel* aChannel,
+ TSensrvTransactionType aType);
+
+ private:
+
+ /**
+ * Message related to transaction.
+ * Can be NULL for clientless internal transactions.
+ * Not own, but is responsible for completion.
+ * All messages are owned by session objects.
+ */
+ CSensrvMessage* iMessage;
+
+ /**
+ * Plugin proxy related to transaction.
+ * Can be NULL for transactions not related to a single proxy.
+ * Not Own.
+ */
+ CSensrvPluginProxy* iProxy;
+
+ /**
+ * Channel related to transaction.
+ * Can be NULL for transactions not related to a channel.
+ * Not Own.
+ */
+ CSensrvChannel* iChannel;
+
+ /**
+ * Transaction type.
+ */
+ TSensrvTransactionType iType;
+
+ /**
+ * Transaction state.
+ */
+ TSensrvTransactionState iState;
+
+ /**
+ * Transaction creation time.
+ */
+ TTime iTimeStamp;
+
+ /**
+ * Error related to transaction.
+ */
+ TInt iErrorCode;
+ };
+
+
+
+#endif // SENSRVTRANSACTION_H