/**
* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "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:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
* Header for Base classes in States and State Machines
* Base classes for agents that are implemented using states and state machines.
* This file contains the APIs required to implement a more advanced agent for Symbian OS.
*
*
*/
/**
@file CAgentSMBase.h
@publishedPartner
@deprecated since v9.5. Use MCPRs/CPRs/SCPRs instead of agents.
*/
#ifndef __CAGENTSMBASE_H__
#define __CAGENTSMBASE_H__
#include <comms-infras/nifprvar.h>
#include <e32base.h>
#include <comms-infras/dialogprocessor.h>
class MAgentNotify
/**
* Notification of events from the CAgentSMBase to the CStateMachineAgent
* @note This class is part of a compatibility layer for porting agent extensions (.agx) from v6.1
* @note This class was previously called MAgentObserver in v6.1
*
* @publishedPartner
* @deprecated since v9.5. Use MCPRs/CPRs/SCPRs instead of agents.
*/
{
public:
/**
*
*/
virtual void PreventConnectionRetries() = 0;
/**
*
*/
virtual void ServiceStarted() = 0;
/**
*
*/
virtual void ConnectionComplete(TInt aProgress, TInt aError) = 0;
/**
*
*/
virtual void ConnectionComplete(TInt aError) = 0;
/**
*
*/
virtual void DisconnectComplete() = 0;
/**
*
*/
virtual void UpdateProgress(TInt aProgress, TInt aError) = 0;
/**
*
*/
virtual TInt Notification(TAgentToNifEventType aEvent, TAny* aInfo) = 0;
/**
*
*/
virtual TInt IncomingConnectionReceived() = 0;
};
class CCommsDbAccess;
class CDialogProcessor;
class MAgentStateMachineEnv : public MAgentNotify
/**
* Interface from individual agent states to agent state machine
* @note This class is part of a compatibility layer for porting agent extensions (.agx) from v6.1
* @ingroup Agent
*
* @publishedPartner
* @deprecated since v9.5. Use MCPRs/CPRs/SCPRs instead of agents.
*/
{
public:
/**
*
*/
virtual CDialogProcessor* DlgPrc() = 0;
/**
*
*/
virtual CCommsDbAccess* Db() =0;
/**
*
*/
virtual void CompleteState(TInt aError) = 0;
/**
*
*/
virtual TBool IsReconnect() const =0;
/**
*
*/
virtual TBool CallBack() const =0;
};
class CAgentStateBase : public CActive
/**
* Base class for individual states within an agent
* @note This class is part of a compatibility layer for porting agent extensions (.agx) from v6.1
*
* @publishedPartner
* @deprecated since v9.5. Use MCPRs/CPRs/SCPRs instead of agents.
*/
{
public:
IMPORT_C CAgentStateBase(MAgentStateMachineEnv& aSMObserver);
IMPORT_C virtual ~CAgentStateBase();
/**
* Start the processing for this state
*/
virtual void StartState() = 0;
/**
* Create and return an instance of the next state object
*/
virtual CAgentStateBase* NextStateL(TBool aContinue) = 0;
protected:
IMPORT_C void JumpToRunl(TInt aError);
protected:
MAgentStateMachineEnv* iSMObserver;
};
class CAgentSMBase : public CActive, public MAgentStateMachineEnv
/**
* Base class for agent state machine
* @note Typically this class is owned by CStateMachineAgentBase
* @note This class is part of a compatibility layer for porting agent extensions (.agx) from v6.1
*
* @publishedPartner
* @deprecated since v9.5. Use MCPRs/CPRs/SCPRs instead of agents.
*/
{
public:
enum TSMContinueConnectType
/**
* The action to be taken by the connection code
* @publishedPartner
* @deprecated since v9.5. Use MCPRs/CPRs/SCPRs instead of agents.
*/
{
ECallBack,
EReconnect,
EDisconnect
};
enum TSMPhase
/**
* The current state of the agent state machine
* @publishedPartner
* @deprecated since v9.5. Use MCPRs/CPRs/SCPRs instead of agents.
*/
{
EConnecting,
EConnected,
EDisconnecting,
EDisconnected
};
public:
IMPORT_C CAgentSMBase(MAgentNotify& aControllerObserver, CDialogProcessor* aDlgPrc, CCommsDbAccess& aDbAccess);
IMPORT_C virtual ~CAgentSMBase();
// Downward calls from NifMan to state machine/states
void StartConnect();
void CancelConnect();
IMPORT_C virtual void ConnectionContinuation(TSMContinueConnectType aConnectionAction);
/**
* Return any excess data was received during connection setup
* @note For example, after a script has run, there may be additional data received that is intended for the nif, which will retrieve it via this method
* @param aBuffer On return, the buffer contains the excess data from the agent
* @returns KErrNone, if successful; otherwise, one of the standard Symbian OS error codes
*/
virtual TInt GetExcessData(TDes8& aBuffer) = 0;
/**
* Notification of an event from the nif
* @param aEvent The type of event that occured
* @param aInfo Any data associated with the event
* @returns KErrNone if successful, otherwise one of the system-wide error codes
*/
virtual TInt Notification(TNifToAgentEventType aEvent, TAny* aInfo) = 0;
IMPORT_C virtual void GetLastError(TInt& aError);
// Upward calls from states/state machine to NifMan. Inherited from MAgentNotify.
IMPORT_C virtual void PreventConnectionRetries();
IMPORT_C virtual void ServiceStarted();
IMPORT_C virtual void ConnectionComplete(TInt aProgress,TInt aError);
IMPORT_C virtual void ConnectionComplete(TInt aError);
IMPORT_C virtual void DisconnectComplete();
IMPORT_C virtual void UpdateProgress(TInt aProgress,TInt aError);
IMPORT_C virtual TInt Notification(TAgentToNifEventType aEvent, TAny* aInfo);
IMPORT_C virtual TInt IncomingConnectionReceived();
// MAgentStateMachineEnv derivation
IMPORT_C virtual CDialogProcessor* DlgPrc();
IMPORT_C virtual CCommsDbAccess* Db();
IMPORT_C virtual void CompleteState(TInt aError);
virtual inline TBool IsReconnect() const;
virtual inline TBool CallBack() const;
private:
IMPORT_C virtual void RunL();
IMPORT_C virtual void DoCancel();
void ProcessState();
void ConnectCompleteReset();
protected:
CAgentStateBase* iState;
MAgentNotify* iControllerObserver;
CDialogProcessor* iDlgPrc;
CCommsDbAccess* iDb;
TBool iContinueConnection;
TBool iIsReconnect;
TBool iCallBack;
TSMPhase iSMPhase;
};
#include <comms-infras/cagentsmbase.inl>
#endif