commands/testexecute/ProxyServer.h
changeset 5 9c58252c6740
--- /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 <fshell/memoryaccess.h>
+#include <e32base.h>
+
+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