/* Copyright (c) 2003, Nokia. All rights reserved */
// INCLUDE FILES
#include <eikenv.h>
#include <coemain.h>
#include <e32std.h>
#include <msvids.h>
#include <msvstd.h>
#include <smsclnt.h>
#include <smut.h>
#include <mtclreg.h>
#include <txtrich.h>
#include <smscmds.h>
#include <mtmuibas.h>
#include <mtmdef.h>
#include <AknNoteWrappers.h>
#include <stringloader.h>
#include <smssend.rsg>
#include "CSmsHandler.h"
#include "CSmsAppUi.h"
#include "smutset.h"
#include "smuthdr.h"
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CSmsHandler::CSmsHandler()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CSmsHandler::CSmsHandler( CSmsAppUi* aSmsAppUi )
: CActive( CActive::EPriorityStandard )
{
CActiveScheduler::Add( this );
iSmsAppUi = aSmsAppUi; // pointer to AppUi
iNextUnread = 0; // index of next unread message in iSelection
}
// -----------------------------------------------------------------------------
// CSmsHandler::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CSmsHandler::ConstructL()
{
// Session to message server is opened asynchronously.
iSession = CMsvSession::OpenAsyncL( *this );
// Entry selection for all received messages.
iSelection = new ( ELeave ) CMsvEntrySelection();
}
// -----------------------------------------------------------------------------
// CSmsHandler::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSmsHandler* CSmsHandler::NewL( CSmsAppUi* aSmsAppUi )
{
CSmsHandler* self = NewLC( aSmsAppUi );
CleanupStack::Pop( self );
return self;
}
// -----------------------------------------------------------------------------
// CSmsHandler::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CSmsHandler* CSmsHandler::NewLC( CSmsAppUi* aSmsAppUi )
{
CSmsHandler* self = new ( ELeave ) CSmsHandler( aSmsAppUi );
CleanupStack::PushL( self );
self->ConstructL();
return self;
}
// ----------------------------------------------------------
// CSmsHandler::~CSmsHandler()
// Destructor.
// ----------------------------------------------------------
//
CSmsHandler::~CSmsHandler()
{
Cancel(); // cancel any outstanding request
delete iOperation;
delete iMtmUiRegistry;
delete iSelection;
delete iSmsMtm;
delete iMtmRegistry;
delete iSession; // session must be deleted last
}
// -----------------------------------------------------------------------------
// CSmsHandler::DoCancel()
// Cancels a request.
// -----------------------------------------------------------------------------
//
void CSmsHandler::DoCancel()
{
if ( iOperation )
{
iOperation->Cancel();
}
}
// -----------------------------------------------------------------------------
// CSmsHandler::RunL()
// Handles request completion events.
// -----------------------------------------------------------------------------
//
void CSmsHandler::RunL()
{
User::LeaveIfError( iStatus != KErrNone );
// Determine the current operations progress.
// ProgressL returns an 8 bit descriptor.
TBufC8<KMsvProgressBufferLength> progress( iOperation->ProgressL() );
_LIT8( KCompare, "KErrNone" );
User::LeaveIfError( !progress.Compare( KCompare ) );
// The pointer to the current CMsvOperation object is no longer needed.
delete iOperation;
iOperation = NULL;
// Determine which request has finished.
switch ( iState )
{
case EWaitingForMoving:
// Once a message is moved to Outbox it is scheduled for sending.
ScheduleL();
break;
case EWaitingForScheduling:
{
TMsvEntry entry( iSmsMtm->Entry().Entry() );
TInt state( entry.SendingState() );
if ( state == KMsvSendStateWaiting || state == KMsvSendStateScheduled)
{
HBufC* text = StringLoader::LoadLC( R_SMS_MOVED_TO_OUTBOX );
CAknInformationNote* informationNote =
new ( ELeave ) CAknInformationNote;
informationNote->ExecuteLD( *text );
CleanupStack::PopAndDestroy( text );
}
break;
}
default:
break;
}
}
// -----------------------------------------------------------------------------
// CSmsHandler::HandleSessionEventL()
// Handles notifications of events from the Message Server.
// -----------------------------------------------------------------------------
//
void CSmsHandler::HandleSessionEventL( TMsvSessionEvent aEvent,
TAny* aArg1, TAny* aArg2, TAny* /*aArg3*/)
{
switch ( aEvent )
{
// Session to server established
case EMsvServerReady:
{
TMsvId serviceId( KUidMsgTypeSMS.iUid ); // SMS service id
// Determine if the event was succesful.
// ServiceProgress inserts TBuf8 value in progress.
TBuf8<KBfrLength> progress;
iSession->ServiceProgress( serviceId, progress );
_LIT8( KCompare, "KErrNone" );
if ( progress.Compare( KCompare ) )
{
HBufC* text = StringLoader::LoadLC( R_SMS_SERVER_SESSION );
CAknInformationNote* informationNote =
new ( ELeave ) CAknInformationNote;
informationNote->ExecuteLD( *text );
CleanupStack::PopAndDestroy( text );
// Check that MtmRegistry has not already been accessed.
if ( !iMtmRegistry )
{
AccessMtmL();
}
}
else
{
HBufC* text = StringLoader::LoadLC( R_SMS_SESSION_ERROR );
CAknErrorNote* errorNote = new ( ELeave ) CAknErrorNote;
errorNote->ExecuteLD( *text );
CleanupStack::PopAndDestroy( text );
}
break;
}
// A new entry has been created on the message server.
case EMsvEntriesCreated:
{
// Entry id is obtained from the session event arguments.
TMsvId* entryId = STATIC_CAST( TMsvId*, aArg2 );
// We are interested in messages that are created in Inbox.
if ( *entryId != KMsvGlobalInBoxIndexEntryId )
{
break;
}
// We take the created entries into a selection
CMsvEntrySelection* newEntries =
STATIC_CAST( CMsvEntrySelection*, aArg1 );
// Process each created entry.
for ( TInt i( 0 ); i < newEntries->Count(); i++ )
{
// We are interested in SMS messages.
if ( ( iSession->GetEntryL( newEntries->At( i ) ) )
->Entry().iMtm == KUidMsgTypeSMS )
{
// Add the entry to the selection of all received messages.
iSelection->AppendL( newEntries->At( i ), 1 );
// Set received messages visible.
MessageReceivedL( newEntries->At( i ) );
}
}
break;
}
case EMsvCloseSession:
case EMsvServerT
程序的代码
需积分: 0 87 浏览量
更新于2008-04-24
收藏 36KB RAR 举报
在IT行业中,编程是核心活动之一,而代码是程序员与计算机交流的语言。在这个场景中,我们关注的是一个名为"csmsappui.cpp"的源代码文件,它在第170行发生了某些重要事件。"cpp"扩展名代表这是一个用C++编写的源文件,这是一种强大且广泛应用的面向对象编程语言。
C++是C语言的增强版,增加了类、模板、异常处理等特性,使得它能够创建高效、可移植并且可维护的软件系统。"csmsappui"可能代表“CSMS应用程序用户界面”,暗示这是一个与短信服务(SMS)相关的应用程序的用户界面部分。源代码文件通常包含了函数定义、变量声明、控制流程结构以及与UI交互的逻辑。
第170行是一个关键位置,因为程序员通常在此处添加特定的代码来处理特定的业务逻辑或解决特定问题。然而,没有具体的代码内容,我们无法详细解析第170行的作用。但我们可以讨论一些常见的编程实践和技术,这些可能在这一行中被应用。
1. **错误处理**:在第170行,可能有一个错误检查或异常处理机制。C++中的`try-catch`块常用于捕获和处理运行时错误。
2. **条件语句**:这行可能包含一个`if`语句,用于根据某些条件改变程序流程,比如决定是否发送短信。
3. **函数调用**:第170行可能是一个函数调用,该函数执行与UI交互或处理短信发送相关的重要任务。
4. **类成员访问**:由于是C++,这一行可能涉及对类成员的访问,如`this->`关键字,或者可能涉及到成员初始化。
5. **模板或泛型编程**:如果第170行涉及容器或算法,那么可能使用了模板,以提供类型无关的代码复用。
6. **UI更新**:在UI代码中,这行可能负责更新用户界面元素,比如显示发送状态。
7. **异步操作**:考虑到这是用户界面代码,第170行可能涉及异步操作,确保UI保持响应,例如使用回调函数或`std::async`。
8. **资源管理**:如果是处理网络请求或数据库操作,这里可能涉及到资源的打开、关闭,需要正确地管理内存和文件句柄。
9. **性能优化**:这一行也可能进行了性能优化,例如使用预编译头、内联函数或缓存结果以减少计算。
10. **代码注释**:良好的编程实践中,第170行附近可能有注释,解释了该行代码的功能和原因。
为了更深入地理解第170行的含义,我们需要查看上下文代码,包括其周围的函数定义、变量声明和类结构。"smssend"可能是另一个相关文件,可能包含了实际的短信发送逻辑,或者与发送短信相关的数据结构。不过,没有更多具体信息,我们只能进行这些一般性的推测。在实际开发环境中,调试、代码审查和版本控制工具是理解这类问题的关键。
雨打芭蕉云遮月
- 粉丝: 0
- 资源: 1
最新资源
- 2003-2024年地级市数字基础设施词频统计数据+Stata整理含说明(全新整理)
- 基于CAN总线的EPEP2023与EPEC2024通讯源程序:主从模式实现与掉电数据保持功能,EPEP2023与EPEC2024之间通过CAN总线通讯源程序 不是硬件 1.CANmoon3.2 2
- 市新型数字基础设施词频结果.xlsx
- 车牌识别数据集-用于车牌识别相关模型训练
- 市新型数字基础设施词频结果.dta
- NPC并网闭环仿真模型的稳定电压源逆变及优化控制策略下的波形表现,npc并网闭环仿真模型 直流侧采用稳定的电压源,逆变之后接入电网 输出电压电流同相位, spwm控制+电流闭环和前馈解耦控制 输出波
- 电子凸轮区间运动Ver1.1.2:精准跟随与加减速控制,单方向动作同步适应,电子凸轮-区间运动Ver1.1.2(位置跟随,去程) 1.一个主轴编码器+一个从轴伺服 2.在200smart CPU224
- 永磁同步模型电流预测控制:结合广义预测与扩展状态观测器的速度环控制及双矢量改进算法的研究与文献分享,永磁同步模型电流预测控制+广义预测控制(速度环) 速度环预测控制采用广义预测与扩展状态观测器结合,提
- 基于MATLAB的光储充微网与电电汽车V2G协同调度策略的双目标优化与经济效益分析,MATLAB代码:考虑V2G的光储充一体化微网多目标优化调度策略 关键词:光储充微网 电电汽车V2G 多目标优化 蓄
- 自主生成空间权重矩阵:案例数据和Stata代码(全新整理)
- This is the Oracle-related instructional video provided by the vendor
- 单相逆变器复合控制策略:结合重复控制与准比例谐振,载波移相降低谐波,FFT分析验证,全离散化仿真实现 ,单相逆变器重复控制 采用重复控制与准比例谐振控制相结合的符合控制策略,spwm调制环节采用载波
- Simulink模型下的纯电动汽车、混合动力汽车及染料电池电动汽车的制动优先与能量管理功能解析,纯电动汽车Simulink模型;混合动力汽车Simulink模型;染料电池电动汽车Simulink模型
- 基于Python控制台的汽车租赁管理系统课程设计
- 三菱FX系列FX2N-4AD-PT模拟量控制程序详解:温度模块的应用与梯形图注释指南,三菱FX系列FX2N-4AD-PT模拟量控制程序 三菱FX系列FX2N-4AD-PT模拟量控制程序 三菱温
- Moonlight_9.10.1.apk