libraries/clogger/inc/SensibleClient_internals.h
author Tom Sutcliffe <thomas.sutcliffe@accenture.com>
Sat, 31 Jul 2010 19:07:57 +0100
changeset 23 092bcc217d9d
parent 0 7f656887cf89
permissions -rw-r--r--
Tidied iocli exports, build macro tweaks. Removed 4 overloads of CCommandBase::RunCommand[L] that are no longer used at all, and changed one more to not be exported as it's only used internally to iocli.dll. fixed builds on platforms that don't support btrace or any form of tracing.

// SensibleClient_internals.h
// 
// Copyright (c) 2006 - 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 SENSIBLECLIENT_INTERNALS_H
#define SENSIBLECLIENT_INTERNALS_H

#include <e32base.h>
#include "cliserv.h"
#include "sensibleclient.h"
#include <gdi.h>

NONSHARABLE_CLASS(CServerCallbackDispatcher) : public CActive
	{
public:
	CServerCallbackDispatcher(RSensibleSessionBody& aSession);
	~CServerCallbackDispatcher();
	void Register();

private:
	void RunL();
	void DoCancel();
	
private:
	RSensibleSessionBody& iSession;
	TPckgBuf<TServerCallback> iNextCallback;
	HBufC8* iCachedCallbackResult8;
	HBufC16* iCachedCallbackResult16;
	HBufC8* iContext;
	TPtr8 iContextPtr; // Stupid client-server...

	enum TState { EWaitingForCallback, EWaitingForContext };
	TState iState;
	};

/*
// An active object that holds on to a bunch of pointers, and frees them when its
// iStatus is completed. Useful for passing temporary descriptors via asyncronous client-
// -server (Otherwise you'd have to ensure yourself that they didn't go out of scope before
// the server had read from them).
// It can optionally pass on the completion message to another TRequestStatus
class CCleanupAndComplete : public CActive
	{
public:
	static CCleanupAndComplete* NewLC(TRequestStatus* aClientStatus);
	static TInt Create(TRequestStatus*& aStatus, const TDesC16& aDes, TInt& aIpcArg); // Non-leaving convenience functions
	static TInt Create(TRequestStatus*& aStatus, const TDesC8& aDes, TInt& aIpcArg); // Non-leaving convenience functions
	void SetActive(); // Declare this so RDasherSession etc can activate us
	void RunL();
	void DoCancel();
	CCleanupAndComplete(TRequestStatus* aClientStatus);
	void AddL(CBase* aWithDestructor);
	void AddL(TAny* aWithoutDestructor);
	~CCleanupAndComplete();
	
public:
	RPointerArray<CBase> iWithDestructor;
	RArray<TAny*> iWithoutDestructor;

private:
	TRequestStatus* iClientStatus;
	};
*/

// A helper class to parse arguments out of a callback from the server
class TCallbackParser
	{
public:
	TCallbackParser(const TServerCallback& aCallback);
	void SetContext(TDesC8& aContext);

	TInt NextInt();
	TUint NextUint();
	TPoint NextPoint();
	TSize NextSize();
	TRgb NextRgb();
	TRect NextRect();
	TPtrC NextDesC();
	TPtrC8 NextDesC8();

private:
	TAny* Next(TInt aSize, char* aType);

private:
	const TServerCallback& iCallback;
	TDesC8* iContext;
	const TUint8* iNextPtr;
	TBool iInContext;
	};

#endif