diff -r 819e59dfc032 -r 2d9cac8919d3 utilityapps/filebrowser/fileopserver/inc/FBFileOpServer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utilityapps/filebrowser/fileopserver/inc/FBFileOpServer.h Mon Oct 18 16:30:05 2010 +0300 @@ -0,0 +1,186 @@ +/* +* 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: +* +*/ + + +#ifndef __FBFILEOPSERVER_H__ +#define __FBFILEOPSERVER_H__ + +#include +#include +#include "FBFileOpClientServer.h" + +// needed for creating server thread. +//const TUint KDefaultHeapSize=0x10000; + +// reasons for server panic +enum TMyPanic + { + EPanicBadDescriptor, + EPanicIllegalFunction + }; + +class CShutdown : public CTimer + { + enum {KMyShutdownDelay=0x200000}; // approx 2s + +public : + inline CShutdown(); + inline void ConstructL(); + inline void Start(); + +private : + void RunL(); + }; + +//********************************** +//CFBFileOpServer +//********************************** +/** +Our server class - an active object - and therefore derived ultimately from CActive. +It accepts requests from client threads and forwards +them to the client session to be dealt with. It also handles the creation +of the server-side client session. +*/ +class CFBFileOpServer : public CServer2 + { + +public : + static CServer2* NewLC(); + void AddSession(); + void DropSession(); + +protected : + +private : + CFBFileOpServer(); + void ConstructL(); + CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; + +public : + +private : + TInt iSessionCount; + CShutdown iShutdown; + + }; + +//********************************** +//CRequestObserver +//********************************** +/** +This class is for monitoring asynchronous request +and for completing related RMessage2 object. +*/ +class CRequestObserver : public CActive + { +public: + CRequestObserver( TInt aPriority ); + virtual ~CRequestObserver(); + + void StartWaiting( const RMessage2& aMsg ); + +private: + // from CActive + void RunL(); + void DoCancel(); + +private: + RMessage2 iMsg; + }; + + +//********************************** +//CFBFileOpServerSession +//********************************** +/** +This class represents a session with the server. +Functions are provided to respond appropriately to client messages. +*/ +class CFBFileOpServerSession : public CSession2, + public MFileManObserver + { + +public : + CFBFileOpServerSession(); + +private: // From MFileManObserver + + TControl NotifyFileManStarted(); + TControl NotifyFileManOperation(); + TControl NotifyFileManEnded(); + +protected : + // panic the client + void PanicClient(const RMessage2& aMessage,TInt aPanic) const; + +private : + ~CFBFileOpServerSession(); + inline CFBFileOpServer& Server(); + void CreateL(); + + //service requests + void ServiceL(const RMessage2& aMessage); + void DispatchMessageL(const RMessage2& aMessage, TBool& aComplete); + + void CopyL(const RMessage2& aMessage); + void RenameL(const RMessage2& aMessage); + void AttribsL(const RMessage2& aMessage); + void RmDirL(const RMessage2& aMessage, TBool& aComplete); + void DeleteL(const RMessage2& aMessage); + void MkDirAllL(const RMessage2& aMessage); + void CreateEmptyFileL(const RMessage2& aMessage); + void EraseMBRL(const RMessage2& aMessage); + void PartitionDriveL(const RMessage2& aMessage); + + void ServiceError(const RMessage2& aMessage, TInt aError); + + void CancelOp(); + +private : + RFs iFs; + RFile iFile; + CFileMan* iFileMan; + MFileManObserver::TControl iFileManObserverResult; + CRequestObserver* iReqObserver; + }; + + +//********************************** +//Inlines +//********************************** + +inline CShutdown::CShutdown() + :CTimer(-1) + {CActiveScheduler::Add(this);} + +inline void CShutdown::ConstructL() + {CTimer::ConstructL();} + +inline void CShutdown::Start() + {After(KMyShutdownDelay);} + +inline CFBFileOpServer::CFBFileOpServer() + :CServer2(0,ESharableSessions) + {} + +inline CFBFileOpServerSession::CFBFileOpServerSession() + {} + +inline CFBFileOpServer& CFBFileOpServerSession::Server() + {return *static_cast(const_cast(CSession2::Server()));} + +#endif