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

📄 gdpsms.h

📁 Symbian C++ scmp.zip
💻 H
字号:
// gdpsms.h
//
// Copyright (c) 2000 Symbian Ltd.  All rights reserved.
//


#ifndef __RGDPSMS_H__
#define __RGDPSMS_H__

#include "gdp.h"
#include "gdpmain.h"
#include "gdpstatemc.h"

#include <e32svr.h>
#include <etel.h>
#include <es_sock.h>
#include <gsmumsg.h>
#include <gsmubuf.h>
#include <gsmuset.h>
#include <smsuaddr.h> 
#include <smsustrm.h>
#include <f32file.h>
#include <commdb.h>
#include <cdbcols.h>

_LIT(KGdpSmsHeaderTag, "//BATTLESHIPS");
_LIT8(KGdpSmsHeaderTag8, "//BATTLESHIPS");
_LIT(KServiceCenterNumber, "+447785016005");		// Vodafone SCA

static const TInt KGdpSmsSendRetries = 3;
static const TInt KGdpSmsReceiveRetries = 2;
static const TInt KGdpSmsSduMaxSize = 160;
static const TInt KGdpSmsPatternLen = 13;
static const TInt KGdpMaxAddressLen = 20;

class CGdpSmsSender;
class CGdpSmsReceiver;
class CGdpSmsResourceManager;

class CGdpSmsComms : public CGdpSession
	{
public:
	static CGdpSession* NewL();

	~CGdpSmsComms();
	void OpenL(MGdpPacketHandler* aHandler);
	void SendL(const TDesC8& aAddress, const TDesC8& aData);
	TInt ReceiveAll();
	TInt GetMaxPacketLength() const;
	TBool IsNetworked() const;
private:
	CGdpSmsComms();

	CGdpSmsSender*			iSender;
	CGdpSmsReceiver*		iReceiver;
	CGdpSmsResourceManager*	iResMan;
	};


class CGdpSmsStateMachine : public CGdpStateMachine
//-----------------------
	{
public:
	CGdpSmsStateMachine(CGdpSmsResourceManager& aResMan);
protected:
	CGdpSmsResourceManager& iResMan;
	};


class CGdpSmsSender : public CGdpSmsStateMachine
//-----------------
	{
public:
	class TSenderState : public CGdpSmsStateMachine::TState
		{
	public:
		TSenderState(CGdpSmsSender& aSmsSender);
	protected:
		CGdpSmsSender& iSender;
		};

	class TSendMsgState : public TSenderState
		{
	public:
		TSendMsgState(CGdpSmsSender& aSmsSender);
		void EnterL();
		TState* CompleteL();
		TState* ErrorL(TInt aCode);
		void Cancel();
	private:
		};
	
	friend class TSendMsgState;

public:
	CGdpSmsSender(CGdpSmsResourceManager& aResMan);
	~CGdpSmsSender();
	void OpenL(MGdpPacketHandler&  iHandler);
	void Close();
	void SendL(const TDesC8& aAddress, const TDesC8& aData);

protected:
	void Reset();
	TState* ErrorOnStateEntry(TInt aError);
	TState* ErrorOnStateExit(TInt aError);

private:

	RSocket			iSocket;
	CSmsMessage*	iSmsMsg;
	TPckgBuf<TUint> iOctlResult;
	TBool			iGotScAddress;
	TInt			iRetries;	// Remaining...
	MGdpPacketHandler*  iHandler;
	
	// States
	TSendMsgState iSendMsgState;

	};


class CGdpSmsReceiver : public CGdpSmsStateMachine
//-------------------
	{
public:
	class TReceiverState : public CGdpSmsStateMachine::TState
		{
	public:
		TReceiverState(CGdpSmsReceiver& aSmsReceiver);
	protected:
		CGdpSmsReceiver& iReceiver;
		};

	class TWaitState : public TReceiverState
		{
	public:
		TWaitState(CGdpSmsReceiver& aSmsReceiver);
		void EnterL();
		TState* CompleteL();
		TState* ErrorL(TInt aCode);
		void Cancel();
	private:
		};

	class TReadMsgState : public TReceiverState
		{
	public:
		TReadMsgState(CGdpSmsReceiver& aSmsReceiver);
		void EnterL();
		TState* CompleteL();
		TState* ErrorL(TInt aCode);
		void Cancel();
		};

	friend class TWaitState;
	friend class TReadMsgState;

public:
	CGdpSmsReceiver(CGdpSmsResourceManager& aResMan);
	~CGdpSmsReceiver();
	void OpenL(MGdpPacketHandler& aHandler);
	void Close();
	void ReceiveAllL();
	
protected:
	void Reset();
	TState* ErrorOnStateEntry(TInt aError);
	TState* ErrorOnStateExit(TInt aError);

private:
	RSocket				iSocket;
	CSmsMessage*		iSmsMsg;
	TPckgBuf<TUint> 	iOctlResult;

	MGdpPacketHandler*  iHandler;
	TInt				iRetries;	// Remaining...

	// States
	TWaitState			iWaitState;
	TReadMsgState		iReadMsgState;
	
	};

class CGdpSmsResourceManager : public CBase
//--------------------------
	{
public:
	~CGdpSmsResourceManager();
	void OpenL();
	void Close();

// Make the following public, because we're more of a record than a class...
public:
	RSocketServ iSocketServer;
	RFs iFs;	
	};

#endif

⌨️ 快捷键说明

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