remotecontrol/remotecontrolfw/client/intermediate/inc/bulkreceiver.h
author hgs
Wed, 13 Oct 2010 16:20:29 +0300
changeset 51 20ac952a623c
permissions -rw-r--r--
201040_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
20ac952a623c 201040_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
20ac952a623c 201040_02
hgs
parents:
diff changeset
     2
// All rights reserved.
20ac952a623c 201040_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
20ac952a623c 201040_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
20ac952a623c 201040_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
20ac952a623c 201040_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
20ac952a623c 201040_02
hgs
parents:
diff changeset
     7
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
20ac952a623c 201040_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    10
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    11
// Contributors:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    12
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    13
// Description:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    14
//
20ac952a623c 201040_02
hgs
parents:
diff changeset
    15
20ac952a623c 201040_02
hgs
parents:
diff changeset
    16
20ac952a623c 201040_02
hgs
parents:
diff changeset
    17
20ac952a623c 201040_02
hgs
parents:
diff changeset
    18
/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    19
 @file
20ac952a623c 201040_02
hgs
parents:
diff changeset
    20
 @internalComponent
20ac952a623c 201040_02
hgs
parents:
diff changeset
    21
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    22
20ac952a623c 201040_02
hgs
parents:
diff changeset
    23
#ifndef BULKRECEIVER_H
20ac952a623c 201040_02
hgs
parents:
diff changeset
    24
#define BULKRECEIVER_H
20ac952a623c 201040_02
hgs
parents:
diff changeset
    25
20ac952a623c 201040_02
hgs
parents:
diff changeset
    26
#include <e32base.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    27
#include <remconinterfaceselector.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    28
#include <remcon/messagetype.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    29
#include <e32msgqueue.h>
20ac952a623c 201040_02
hgs
parents:
diff changeset
    30
#include "utils.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    31
20ac952a623c 201040_02
hgs
parents:
diff changeset
    32
class RRemConBulk;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    33
20ac952a623c 201040_02
hgs
parents:
diff changeset
    34
20ac952a623c 201040_02
hgs
parents:
diff changeset
    35
/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    36
Active Object for receiving messages from an RRemConBulk 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    37
*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    38
NONSHARABLE_CLASS(CBulkReceiver)
20ac952a623c 201040_02
hgs
parents:
diff changeset
    39
	: public CActive
20ac952a623c 201040_02
hgs
parents:
diff changeset
    40
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    41
public:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    42
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    43
	Factory method.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    44
	@param aObserver Our observer.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    45
	@return Ownership of a new CBulkReceiver.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    46
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    47
	static CBulkReceiver* NewL(CRemConInterfaceSelector& aObserver);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    48
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    49
	~CBulkReceiver();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    50
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    51
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    52
	Indicates that the receiver needs to be initialised.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    53
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    54
	TBool InitialisationRequired() const;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    55
20ac952a623c 201040_02
hgs
parents:
diff changeset
    56
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    57
	Initialisation method.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    58
	@param aRemConBulk The session to receive on.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    59
	@param aMaxDataLength The size of the buffer to read operation-associated 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    60
	data into.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    61
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    62
	void InitialiseL(RRemConBulk& aRemConBulk, TUint aMaxDataLength);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    63
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    64
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    65
	Called when the client wants to receive a message. On completion, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    66
	notifies the observer and re-issues itself until the client destroys it. 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    67
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    68
	void Receive();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    69
20ac952a623c 201040_02
hgs
parents:
diff changeset
    70
public:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    71
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    72
	Called by the interface selector to connect the client session to the server.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    73
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    74
	void WaitUntilConnectedL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    75
20ac952a623c 201040_02
hgs
parents:
diff changeset
    76
private: // from CActive
20ac952a623c 201040_02
hgs
parents:
diff changeset
    77
	void RunL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    78
	void DoCancel();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    79
20ac952a623c 201040_02
hgs
parents:
diff changeset
    80
private:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    81
	CBulkReceiver(CRemConInterfaceSelector& aObserver);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    82
	void ConstructL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    83
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    84
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    85
	Places the active object on the current active scheduler.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    86
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    87
	void BindToCurrentThreadL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    88
	void DoBindToCurrentThreadL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    89
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    90
	static TInt StaticConnect(TAny* aSelf);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    91
	TInt Connect();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    92
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    93
private: // owned
20ac952a623c 201040_02
hgs
parents:
diff changeset
    94
	// These are the members we pass to the inner client API to get messages 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    95
	// out of RemCon.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    96
	TUid			iInterfaceUid;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    97
	TUint			iOperationId;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    98
	RBuf8			iData;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    99
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   100
	// These are the members related to co-ordinating the receiver which can
20ac952a623c 201040_02
hgs
parents:
diff changeset
   101
	// be in a different thread.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   102
	TThreadId				iThreadId;		//<! The thread ID that the receiver is running in.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   103
	RSpecificThreadCallBack	iCancelCall;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   104
	RSpecificThreadCallBack	iConnectCall;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   105
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   106
20ac952a623c 201040_02
hgs
parents:
diff changeset
   107
private: // unowned
20ac952a623c 201040_02
hgs
parents:
diff changeset
   108
	RRemConBulk*				iRemConBulk;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   109
	CRemConInterfaceSelector&	iObserver;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   110
	};
20ac952a623c 201040_02
hgs
parents:
diff changeset
   111
20ac952a623c 201040_02
hgs
parents:
diff changeset
   112
20ac952a623c 201040_02
hgs
parents:
diff changeset
   113
#endif // RECEIVER_H