📄 soc.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 + -