RConnection的简单使用两则

2023-10-29 19:18

本文主要是介绍RConnection的简单使用两则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RConnection  的基类是 RSubSessionBase 。目前我所知道的就是两个功能:一、为套接字在 SymbianOS 上使用建立会话通道,二、使用已建立的会话通道

第一种应用是为了屏蔽接入点( IAP )选择对话框,具体代码如下

TInt currentProfileId;

 

// Check whether we are offline or online

iRepository->Get(KProEngActiveProfile, currentProfileId);

if (currentProfileId == 5)

{

     // Close and uninitialize

     iConnection.Close();

     iSocketServ.Close();

}

// 这里的 iSelectedIap 是已经选择好的接入点 iap

if(iSelectedIap == 0)

        return;

 

User::LeaveIfError(iSocketServ.Connect());

User::LeaveIfError(iConnection.Open(iSocketServ));

TCommDbConnPref pref;

// IAP ID for connection to be used

pref.SetIapId(iSelectedIap);

//CEikonEnv::Static()->InfoWinL(_L("note:"), _L("Iap OK"));

pref.SetDialogPreference( ECommDbDialogPrefDoNotPrompt);

pref.SetDirection(ECommDbConnectionDirectionOutgoing );

//CEikonEnv::Static()->InfoWinL(_L("note:"), _L("Pref Ok"));

iConnection.Start(pref,iStatus);

SetActive();

由以上代码可知,建立会话通道是一个异步函数,所以最好在活动对象中使用,因为目前该代码只是在 G 网上亲测过,在 3GWLAN 是否也通用暂时还不敢肯定。

 

第二种应用往往用在复用通道上,比方说同一个程序有多个线程(或者使用 C/S 架构的程序,不同的进程乃至两个完全无关的)需要使用网络,没必要每个线程都去建立一个会话通道,所以就采用复用的方式;还有一种复用的要求就是用 RConnection 来获得当前链接的流量等数据,以下就给出这么一种应用的代码:

TUint       vUl = 0;

TUint       vDl = 0;

TPckg< TUint >   UplinkVolume(vUl);

TPckg< TUint >   DownlinkVolume(vDl);

TRequestStatus   aStatus;

RConnection           vConnection;

if(vConnection.Open(iSocketServ) == KErrNone)

{

        TPckgBuf<TConnectionInfo> connInfo;

        TUint count;

        if (vConnection.EnumerateConnections(count) == KErrNone)

        {

               for (TUint i=1; i<=count; i++)

               {

                      // Note: GetConnectionInfo expects 1-based index.

                      if (vConnection.GetConnectionInfo(i, connInfo) == KErrNone)

                      {    

                             TInt vErr = vConnection.Attach(connInfo, RConnection::EAttachTypeNormal);

 

                      }

               }

        }

}

 

vConnection.DataTransferredRequest(UplinkVolume, DownlinkVolume, aStatus);

User::WaitForRequest(aStatus);

 

TFileName vBuffergg,vBuffergg2;

vBuffergg.AppendNum(vDl);

iObserver.RComValuesL(EGetConnectId,_L("KDownlinkData"),vBuffergg,0); 

vBuffergg2.AppendNum(vUl);

iObserver.RComValuesL(EGetConnectId,_L("KUplinkData"),vBuffergg2,0);    

 

vConnection.Close();

 

代码往往都是很简单的,但是往往会有点问题,在这个获取流量的方法上,起初我们使用单线程可以用,但是后来居然不能用了,百思不得其解,后来经过分析存在后面的一些问题,先得出一个结论, RConnection 可以跨线程乃至进程使用

 

注意点

TConnectionInfoV2 获取的 coninfo 不能进行 attach ,否则会爆 -34 错误,如果同一个 RConnection 对象已经连接上了,再继续使用 attach ,则会报 -14 错误,但是 RConnection 对象仍然是可以正常使用的,可以通过它创建 Socket 和监控流量等。

在使用 TPckg 的时候尤其要注意类型的配对问题,因为上面代码中用到的是局部变量,很显然如下代码不会有误

TUint       vUl = 0;

TUint       vDl = 0;

TPckg< TUint >   UplinkVolume(vUl);

TPckg< TUint >   DownlinkVolume(vDl);

但是一次当我将 vUlvDl 声明成类的成员变量时,弄成如下方式

TUint32    iUl = 0;

TUint32    iDl = 0;

再将其用 TPckg 进行封装之后,传入 DataTransferredRequest 函数,得到的流量始终是 0 ,真的让我百思不得其解,这种失误教训真的太深刻。


    另外,近来发现RConnection类的实例对象是不能够进行跨线程调用,同样的CRepository的实例对象跨线程调用也是不允许的。

这篇关于RConnection的简单使用两则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/302797

相关文章

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo