remotecontrol/remotecontrolfw/server/inc/controllersession.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) 2010 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
#ifndef CONTROLLERSESSION_H
20ac952a623c 201040_02
hgs
parents:
diff changeset
    17
#define CONTROLLERSESSION_H
20ac952a623c 201040_02
hgs
parents:
diff changeset
    18
20ac952a623c 201040_02
hgs
parents:
diff changeset
    19
#include "session.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    20
#include "messagesendobserver.h"
20ac952a623c 201040_02
hgs
parents:
diff changeset
    21
20ac952a623c 201040_02
hgs
parents:
diff changeset
    22
class CActiveHelper;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    23
NONSHARABLE_CLASS(CRemConControllerSession) : public CRemConSession, public MRemConMessageSendObserver
20ac952a623c 201040_02
hgs
parents:
diff changeset
    24
	{
20ac952a623c 201040_02
hgs
parents:
diff changeset
    25
public:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    26
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    27
	Factory method.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    28
	@param aServer The server.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    29
	@param aBearerManager The bearer manager.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    30
	@param aClientInfo Information about the client using this session.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    31
	@param aId The unique ID of the new session.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    32
	@return Ownership of a new session.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    33
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    34
	static CRemConControllerSession* NewL(CRemConServer& aServer,
20ac952a623c 201040_02
hgs
parents:
diff changeset
    35
		CBearerManager& aBearerManager,
20ac952a623c 201040_02
hgs
parents:
diff changeset
    36
		const TClientInfo& aClientInfo,
20ac952a623c 201040_02
hgs
parents:
diff changeset
    37
		TUint aId);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    38
20ac952a623c 201040_02
hgs
parents:
diff changeset
    39
	~CRemConControllerSession();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    40
20ac952a623c 201040_02
hgs
parents:
diff changeset
    41
	/** 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    42
	Checks if this message is supported by the session
20ac952a623c 201040_02
hgs
parents:
diff changeset
    43
	@param aMsg The message to check
20ac952a623c 201040_02
hgs
parents:
diff changeset
    44
	@return ETrue if it is, EFalse otherwise
20ac952a623c 201040_02
hgs
parents:
diff changeset
    45
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    46
	TBool SupportedMessage(const CRemConMessage& aMsg) const;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    47
20ac952a623c 201040_02
hgs
parents:
diff changeset
    48
	inline const TPlayerType& PlayerType() const;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    49
	inline const TPlayerSubType& PlayerSubType() const;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    50
	inline const TDesC8& Name() const;
20ac952a623c 201040_02
hgs
parents:
diff changeset
    51
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    52
public: // called by the bearer manager
20ac952a623c 201040_02
hgs
parents:
diff changeset
    53
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    54
	Indicates that a connect request has been completed. The request was not 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    55
	necessarily from this session- the session must check that the connected 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    56
	address is one it has asked to be connected. If it is, and we have a 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    57
	connect request outstanding, the connect request should be completed.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    58
	@param aAddr The connected address.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    59
	@param aError The error with which the connection attempt was completed.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    60
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    61
	void CompleteConnect(const TRemConAddress& aAddr, TInt aError);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    62
20ac952a623c 201040_02
hgs
parents:
diff changeset
    63
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    64
	Indicates that a disconnect request has been completed. The request was 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    65
	not necessarily from this session- the session must check that the 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    66
	disconnected address is one it has asked to be disconnected. If it is, and 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    67
	we have a disconnect request outstanding, the disconnect request should be 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    68
	completed.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    69
	@param aAddr The disconnected address.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    70
	@param aError The error with which the disconnection attempt was 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    71
	completed.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    72
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    73
	void CompleteDisconnect(const TRemConAddress& aAddr, TInt aError);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    74
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    75
public: // called by the active helper
20ac952a623c 201040_02
hgs
parents:
diff changeset
    76
	void ProcessPendingMsgL();
20ac952a623c 201040_02
hgs
parents:
diff changeset
    77
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    78
private:
20ac952a623c 201040_02
hgs
parents:
diff changeset
    79
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    80
	Constructor.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    81
	@param aServer The server.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    82
	@param aBearerManager The bearer manager.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    83
	@param aId The unique ID of the new session.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    84
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    85
	CRemConControllerSession(CRemConServer& aServer, 
20ac952a623c 201040_02
hgs
parents:
diff changeset
    86
		CBearerManager& aBearerManager,
20ac952a623c 201040_02
hgs
parents:
diff changeset
    87
		TUint aId);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    88
20ac952a623c 201040_02
hgs
parents:
diff changeset
    89
	/**
20ac952a623c 201040_02
hgs
parents:
diff changeset
    90
	2nd-phase construction.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    91
	@param aClientInfo Information about the client using this session.
20ac952a623c 201040_02
hgs
parents:
diff changeset
    92
	*/
20ac952a623c 201040_02
hgs
parents:
diff changeset
    93
	void ConstructL(const TClientInfo& aClientInfo);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    94
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
    95
private: // From CRemConSession: utility- IPC command handlers
20ac952a623c 201040_02
hgs
parents:
diff changeset
    96
	void SetPlayerType(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    97
	void SendUnreliable(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    98
	void RegisterInterestedAPIs(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
    99
	void GoConnectionOriented(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   100
	void GoConnectionless(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   101
	void ConnectBearer(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   102
	void ConnectBearerCancel(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   103
	void DisconnectBearer(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   104
	void DisconnectBearerCancel(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   105
	void SendNotify(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   106
20ac952a623c 201040_02
hgs
parents:
diff changeset
   107
private: // From CRemConSession: utility
20ac952a623c 201040_02
hgs
parents:
diff changeset
   108
	CRemConMessage* DoPrepareSendMessageL(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   109
	void DoSendCancel();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   110
	void DoReceive();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   111
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   112
private: // utility
20ac952a623c 201040_02
hgs
parents:
diff changeset
   113
	CRemConMessage* DoCreateUnreliableMessageL(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   114
	void DoSendNotifyL(const RMessage2& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   115
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   116
	void SendToServer(CRemConMessage& aMsg);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   117
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   118
	void CheckForPendingMsg() const; 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   119
	void EmptySendQueue();
20ac952a623c 201040_02
hgs
parents:
diff changeset
   120
20ac952a623c 201040_02
hgs
parents:
diff changeset
   121
	void CompleteMessage(const CRemConMessage& aMessage);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   122
20ac952a623c 201040_02
hgs
parents:
diff changeset
   123
public: //From MRemConMessageSendObserver
20ac952a623c 201040_02
hgs
parents:
diff changeset
   124
	void MrcmsoMessageSendResult(const CRemConMessage& aMessage, TInt aError);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   125
	void MrcmsoMessageSendOneOrMoreAttempt(const CRemConMessage& aMessage, TUint aNumRemotes);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   126
	void MrcmsoMessageSendOneOrMoreIncremental(const CRemConMessage& aMessage, TUint aNumRemotes);	// Not supported
20ac952a623c 201040_02
hgs
parents:
diff changeset
   127
	void MrcmsoMessageSendOneOrMoreAttemptFailed(const CRemConMessage& aMessage, TInt aError);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   128
	void MrcmsoMessageSendOneOrMoreResult(const CRemConMessage& aMessage, TInt aError);
20ac952a623c 201040_02
hgs
parents:
diff changeset
   129
	void MrcmsoMessageSendOneOrMoreAbandoned(const CRemConMessage& aMessage);	// Not supported
20ac952a623c 201040_02
hgs
parents:
diff changeset
   130
20ac952a623c 201040_02
hgs
parents:
diff changeset
   131
private: // message handles for asynchronous IPC requests
20ac952a623c 201040_02
hgs
parents:
diff changeset
   132
	// Address of remote device associated with this session.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   133
	// A null remote address indicates a connectionless 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   134
	// controller; a non-null UID indicates a connection-oriented controller.
20ac952a623c 201040_02
hgs
parents:
diff changeset
   135
	TRemConAddress iRemoteAddress;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   136
20ac952a623c 201040_02
hgs
parents:
diff changeset
   137
	RMessage2 iConnectBearerMsg;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   138
	RMessage2 iDisconnectBearerMsg;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   139
	// Stores pending connect/disconnect request
20ac952a623c 201040_02
hgs
parents:
diff changeset
   140
	// There can be only one pending request at any time
20ac952a623c 201040_02
hgs
parents:
diff changeset
   141
	RMessage2 iPendingMsg;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   142
	
20ac952a623c 201040_02
hgs
parents:
diff changeset
   143
	// Helps with session's async connect/disconnect requests
20ac952a623c 201040_02
hgs
parents:
diff changeset
   144
	CActiveHelper *iPendingMsgProcessor;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   145
20ac952a623c 201040_02
hgs
parents:
diff changeset
   146
	// the player type information
20ac952a623c 201040_02
hgs
parents:
diff changeset
   147
	TPlayerTypeInformation iPlayerType;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   148
	//the player name 
20ac952a623c 201040_02
hgs
parents:
diff changeset
   149
	RBuf8 iPlayerName;
20ac952a623c 201040_02
hgs
parents:
diff changeset
   150
	};
20ac952a623c 201040_02
hgs
parents:
diff changeset
   151
20ac952a623c 201040_02
hgs
parents:
diff changeset
   152
#include "controllersession.inl"
20ac952a623c 201040_02
hgs
parents:
diff changeset
   153
20ac952a623c 201040_02
hgs
parents:
diff changeset
   154
#endif /* CONTROLLERSESSION_H */