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

📄 soc.cpp

📁 symbian第二版秘密收发短信(不响铃不震动)的例子实现。
💻 CPP
字号:

#include <smsuaddr.h>
#include <smsustrm.h>
#include "soc.h"
#include <f32file.h>
#include <aknnotewrappers.h>
//#include <gsmuset.h>
#include <gsmupdu.h>
#include <Gsmuelem.h>


// -----------------------------------------------------------------------------
// CSMSEngine::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSMSEngine* CSMSEngine::NewL()
    {
    CSMSEngine* self = CSMSEngine::NewLC();
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// CSMSEngine::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSMSEngine* CSMSEngine::NewLC()
    {
    CSMSEngine* self = new ( ELeave ) CSMSEngine;
    CleanupStack::PushL( self );
    self->ConstructL();
    return self;
    }

// -----------------------------------------------------------------------------
// CSilentSmsAppView::CSilentSmsAppView()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//  
CSMSEngine::CSMSEngine(): CActive(CActive::EPriorityStandard)
	{
	CActiveScheduler::Add(this);
	}
	
// -----------------------------------------------------------------------------
// CSMSEngine::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//	
void CSMSEngine::ConstructL()
	{
	iRead=ETrue;
	iFs.Connect();
	iSocketServer.Connect();	
	}

// -----------------------------------------------------------------------------
// CSMSEngine::~CSMSEngine()
// Destructor.
// -----------------------------------------------------------------------------
//
CSMSEngine :: ~CSMSEngine()
	{
	Cancel();
	iSocketServer.Close();
	iFs.Close();
	if(iSmsMessage)
	{
	delete iSmsMessage;	
	iSmsMessage	= NULL;
	}
	
	}

// -----------------------------------------------------------------------------
// CSMSEngine::SocketListen()
// Listens to incoming messages containing a match text.
// -----------------------------------------------------------------------------
//
void CSMSEngine::SocketListen()
	{
	_LIT(KTag, "");
	TBuf8<2> matchTag;
	matchTag.Copy(KTag);

	//Opens a socket by creating a new subsession to the socket server.
	TInt err = iSocket.Open(iSocketServer, KSMSAddrFamily, KSockDatagram, KSMSDatagramProtocol);
	if(err==KErrNone)
		{ 
		TRequestStatus iStatus;
		TSmsAddr smsaddr; 
		// App. listens for sms msgs with some special tag in it.
  		smsaddr.SetSmsAddrFamily(ESmsAddrMatchText); 
		smsaddr.SetTextMatch(matchTag);
		TInt BindErr = iSocket.Bind(smsaddr);
		if(BindErr == KErrNone)
			{
			iPckgBuf() = KSockSelectRead;
			//Applies an asynchronous I/O control operation on a socket.
			iSocket.Ioctl( KIOctlSelect,iStatus, &iPckgBuf, KSOLSocket);
			iRead=ETrue;
			SetActive();
			}
		}
	}        

// -----------------------------------------------------------------------------
// CSMSEngine::RunL()
// Gets hit everytime a message with the 'tag' arrives
// -----------------------------------------------------------------------------
//
void CSMSEngine::RunL()
	{
	if(iRead)
	    {
		CSmsBuffer *smsBuffer = CSmsBuffer::NewL();
		CleanupStack::PushL(smsBuffer);
		//Stream that reads a CSmsMessage object across a socket.
		RSmsSocketReadStream readStream(iSocket);
		//Allocates and creates a CSmsMessage
		//ESmsDeliver-SMS-DELIVER, sent from service center to Mobile Station. 
		iSmsMessage = CSmsMessage::NewL(iFs,CSmsPDU::ESmsDeliver,smsBuffer);
		//Internalises data from stream to CSmsMessage
		iSmsMessage->InternalizeL(readStream);
		readStream.Close();	
		//Extracting the received message to a buffer	
		iSmsMessage->Buffer().Extract(iBuf,0,iSmsMessage->Buffer().Length());
	   	iSocket.Ioctl( KIoctlReadMessageSucceeded,iStatus, &iPckgBuf, KSolSmsProv);
	   	//Printing the received Message.
	    CAknInformationNote* note122=new(ELeave) CAknInformationNote;
	    note122->ExecuteLD(iBuf);
		iRead=EFalse;		
		SetActive();
		CleanupStack::PopAndDestroy(smsBuffer);
	    }
	} 
	 
// -----------------------------------------------------------------------------
// CSMSEngine::DoCancel()
// -----------------------------------------------------------------------------
//
void CSMSEngine::DoCancel()
	{
	iSocket.CancelIoctl();
	}
	

⌨️ 快捷键说明

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