diff -r 7fdc9a71d314 -r 8ad140f3dd41 hti/HtiCommPlugins/HtiBtCommPlugin/HtiBtCommServer/inc/HtiBtCommServerSession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hti/HtiCommPlugins/HtiBtCommPlugin/HtiBtCommServer/inc/HtiBtCommServerSession.h Wed Oct 13 16:17:58 2010 +0300 @@ -0,0 +1,154 @@ +/* +* Copyright (c) 2009 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: Server side session in HtiBtCommServer. +* +*/ + + +#ifndef CHTIBTCOMMSERVERSESSION_H +#define CHTIBTCOMMSERVERSESSION_H + +// INCLUDES +#include +#include + +#include "BtSerialClient.h" // MBtSerialClientObserver + +// FORWARD DECLARATIONS + +class CHtiBtCommServer; + +// CLASS DECLARATION + +/** +* This class represents a client session in the server. +* +* Server owns one instance of session (meaning only one client session +* is allowed for this server). +* Session allows only one outstanding read request and write request at a time. +* Read request and write request may be outstanding simultaneously. +*/ +class CHtiBtCommServerSession : + public CSession2, + public MBtSerialClientObserver + { +public: + + /** + * Two phase constructor. + * + * @param aServer Pointer to the server instance + */ + static CHtiBtCommServerSession* NewL( CHtiBtCommServer* aServer ); + +private: // Construction + + /** + * C++ default constructor. + * + * @param aClient + * @param aServer + */ + CHtiBtCommServerSession( CHtiBtCommServer* aServer ); + + /** + * Second phase construction. + */ + void ConstructL(); + + /** + * Destructor. + */ + ~CHtiBtCommServerSession(); + +private: // From MBtSerialClientObserver + + void ConnectedToServer(TInt aError); + void DisconnectedFromServer(); + void DataFromServer(const TDesC8& aData); + void AllBufferedDataSent(); + +private: + + /** + * Handle client request. This is invoced by client server framework. + * @param aMessage Message object describing client request + */ + virtual void ServiceL(const RMessage2 &aMessage); + + /** + * Determine client request type and delegate handling accordingly. + * @param aMessage Message object describing client request + */ + void DispatchMessageL(const RMessage2 &aMessage); + + void HandleConnectRequestL(const RMessage2& aMessage); + + /** + * Handle client's send request. + * Copies data from client address space to internal send buffer and starts + * sending it. + * @param aMessage Message object describing client request + */ + void HandleSendRequestL(const RMessage2& aMessage); + + /** + * Handle client's read request. + * Wait for incoming data. Once received, copy its data to client's + * address space and complete client's request. + * @param aMessage Message object describing client request + */ + void HandleReadRequestL(const RMessage2& aMessage); + + /** + * Handle client's cancel requests. + * Cancel either read or write operation depending on client request. + * @param aMessage Message object describing client request + */ + void HandleCancelRequestL(const RMessage2& aMessage); + + /** + * Handle port number request + * Write the port number of the currently connected service. If not + * connected writes KErrDisconnected. + */ + void HandlePortNumberRequestL(const RMessage2& aMessage); + +private: // Helpers + + void PanicClient(TInt aPanic) const; + void ResetAll(TInt aCompletionCode); + void TryCompleteReadRequest(); + +private: // Data + + CHtiBtCommServer *iBtCommServer; // referenced + + RMessage2 iReadRequest; + RMessage2 iWriteRequest; + RMessage2 iConnectRequest; + TBool iWriteRequestComplete; // ETrue: no previous pending write request + TBool iReadRequestComplete; // ETrue: no previous pending read request + TBool iConnectRequestComplete; + + CBtSerialClient* iBtClient; + + HBufC8* iIncomingDataBuf; // Coming from remote host + HBufC8* iSendBuffer; // Sent to remote host + + }; + +#endif // CHTIBTCOMMSERVERSESSION_H + +// End of File