diff -r c061fa280d92 -r 9c58252c6740 commands/testexecute/ProxyServer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commands/testexecute/ProxyServer.h Wed Jul 07 16:07:08 2010 +0100 @@ -0,0 +1,82 @@ +// ProxyServer.h +// +// Copyright (c) 2010 Accenture. All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the "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: +// Accenture - Initial contribution +// +#ifndef PROXYSERVER_H +#define PROXYSERVER_H + +#include +#include + +class CProxySession; + +class MMessageHandler + { +public: + virtual TBool HandleMessageL(CProxySession* aSession, const RMessage2& aMessage)=0; + }; + +NONSHARABLE_CLASS(CProxyServer) : public CServer2 + { +public: + static CProxyServer* NewInSeparateThreadL(const TDesC& aServerToReplace, MMessageHandler* aHandler=NULL); + void Destroy(); // This should be used instead of delete - the server object has to be destroyed from the thread in which it was started + MMessageHandler* Handler() const; + +protected: + CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; + +private: + ~CProxyServer(); + CProxyServer(const TDesC& aServerToReplace, MMessageHandler* aHandler); + void ConstructL(); + void ThreadConstructL(); + static TInt StartServerThreadFunction(TAny* aSelf); + void ServerThreadRunL(); + static TInt Shutdown(TAny* aSelf); + +private: + RMemoryAccess iMemAccess; + TBool iProxying; + TName iServerName; + TName iRealServerName; + RThread iServerThread; + MMessageHandler* iHandler; + CAsyncCallBack* iShutdownCallback; + }; + +class RUnderlyingSession : public RSessionBase + { +public: + friend class CProxySession; + friend class CAsyncWaiter; + }; + +NONSHARABLE_CLASS(CProxySession) : public CSession2 + { +public: + void ConstructL(const TDesC& aServerName, const TVersion& aVersion); + void ForwardUnhandledMessageL(const RMessage2& aMessage); + void ForwardMessageArgsL(const RMessage2& aMessage, const TIpcArgs& aArgs); + +protected: + void ServiceL(const RMessage2 &aMessage); + void Disconnect(const RMessage2 &aMessage); + +private: + CProxyServer& Server(); + const CProxyServer& Server() const; + +private: + RUnderlyingSession iSession; + }; + + +#endif