⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 controller.h

📁 《SymbianOSC手机应用开发》源码
💻 H
字号:
// controller.h
//
// Copyright (c) 2003 Symbian Ltd.  All rights reserved.
//

#ifndef __CONTROLLER_H
#define __CONTROLLER_H

#include <coecntrl.h>
#include <coemain.h>

#include <eikappui.h>
#include <eikapp.h>
#include <eikdoc.h>
#include <eikenv.h>
#include <eikon.hrh>

#include <battleships.rsg>

#include <rgcp.h>

#include "battleships.hrh"
#include "battleships-uids.h"
#include "engine.h"
#include "view.h"

class CFleetView;

const TUid KUidExample = { 0x101FAD5D };

// RGCP opcodes

const TInt KGameOpcodeStart=1;
const TInt KGameOpcodeRestart=2;
const TInt KGameOpcodeNop=3;
const TInt KGameOpcodeAbandon=4;
const TInt KGameOpcodeHit=10;

// command handler
class MGameViewCmdHandler
	{
public:
	virtual void ViewCmdHitFleet(TInt aX, TInt aY)=0;
	};

// controller
class CGameController : public CBase, public MGameViewCmdHandler, public MRgcpHandler
	{
public:

	enum TState {
		EBlank, EListening, EInitiating, EStarting, EAccepting,
		EMyTurn, EOppTurn, EFinished, ERestarting, EGameOn
		};
	enum TFirstMovePref {
		EDontCare, EWantFirst, EWantSecond
		};

	// construct/destruct
	static CGameController* NewL();
	static CGameController* NewL(const CStreamStore& aStore, TStreamId aStreamId);
	void RestoreL(const CStreamStore& aStore, TStreamId aStreamId);
	void SetAppView(CFleetView* aAppView);
	~CGameController();
	// persistence
	TStreamId StoreL(CStreamStore& aStore) const;
	// state
	inline TState State() const;
	inline TBool IsBlank() const;
	inline TBool IsInitiating() const;
	inline TBool IsListening() const;
	inline TBool IsStarting() const;
	inline TBool IsAccepting() const;
	inline TBool IsMyTurn() const;
	inline TBool IsOppTurn() const;
	inline TBool IsFinished() const;
	inline TBool IsRestarting() const;
	void SetState(TState aState);
	TInt GetStateID();
	// comms
	inline const CRgcpSession* Rgcp() const;
	inline const RGsdpSession& Gsdp() const;
	inline TUid GetGdpProtocol() const;

	// game control
	void Reset();
	void SetGdpProtocolL(TUid aProtocol);
	void SetFirstMovePref(TFirstMovePref aFirstMovePref);
	void InitiateL(const TDesC& aOtherAddress);
	void Listen();
	void Abandon();
	void Resend();
	// query
	TBool HaveFirstMovePref() const;
	TFirstMovePref FirstMovePref() const;


	// zooming
	void ZoomInL();
	void ZoomOutL();
	// engine
	inline CGameEngine& Engine() const;

private:
	// construct/restore
	void ConstructL();
	// stream persistence
	void ExternalizeL(RWriteStream& aStream) const;
	void InternalizeL(RReadStream& aStream);
	// MRgcpHandler stuff
	void RgcpHandleResponse(TInt aOpcode, const TDesC8& aData);
	void RgcpHandleRequest(TInt aOpcode, const TDesC8& aData);
	void RgcpHandleTerminated(TBool aClientInitiated);
	void RgcpHandleBound();
	void RgcpStartRequesting();
	// from MGameViewCmdHandler
	void ViewCmdHitFleet(TInt aX, TInt aY);
		// sending requests
	void SendRestartRequest();
	void SendStartRequest();
	void SendAbandonRequest();
	void SendNopRequest();
	void SendHitRequest(TInt aX, TInt aY);
	// sending responses
	void SendStartResponse(TBool iMeFirst);
	void SendHitResponse(TInt aX, TInt aY, TShip::TShipType aShipType);
	// handling requests
	void HandleRestartRequest();
	void HandleStartRequest(const TDesC8& aData);
	void HandleAbandonRequest();
	void HandleHitRequest(const TDesC8& aData);
	// handling responses
	void HandleStartResponse(const TDesC8& aData);
	void HandleHitResponse(const TDesC8& aData);

	CFleetView& ActiveView() const;


private:
	CFleetView* iAppView;
	CGameEngine* iEngine;
	CRgcpSession* iRgcp;

private:
	// cached pointers and values
	CEikonEnv* iEnv;
	TUid iGdpProtocol;
	// private persistent state
	TState iState;
	TBool iHaveFirstMovePref;
	TFirstMovePref iFirstMovePref;

	// zoom for internalizing
	TInt iZoomFactor;
	};

// state inlines
inline CGameController::TState CGameController::State() const { return iState; }
inline TBool CGameController::IsBlank() const { return  iState==EBlank; }
inline TBool CGameController::IsInitiating() const { return  iState==EInitiating; }
inline TBool CGameController::IsListening() const { return  iState==EListening; }
inline TBool CGameController::IsStarting() const { return  iState==EStarting; }
inline TBool CGameController::IsAccepting() const { return  iState==EAccepting; }
inline TBool CGameController::IsMyTurn() const { return  iState==EMyTurn; }
inline TBool CGameController::IsOppTurn() const { return  iState==EOppTurn; }
inline TBool CGameController::IsFinished() const { return  iState==EFinished; }
inline TBool CGameController::IsRestarting() const { return  iState==ERestarting; }

// comms
inline const CRgcpSession* CGameController::Rgcp() const { return iRgcp; }
inline const RGsdpSession& CGameController::Gsdp() const { return iRgcp->Gsdp(); }
inline TUid CGameController::GetGdpProtocol() const { return iGdpProtocol; }

inline CGameEngine& CGameController::Engine() const	{ return *iEngine; }

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -