Symbian 学习日志(十. Server Client 框架)

ClientServer 构架:

 

一、为什么要使用这种构架

将和低层和操作的代码和放在Server 端,将和用户交互的代码放在Client 端;

 

二、通讯使用到的类

l         RSessionBase 客户端连接的基类

 

三、RSessionBase

 

定义如下,大部分函数是保护成员,只能从派生类来调用,不能新建一个实例在其它类中调用;

class RSessionBase : public RHandleBase

{

public:

      enum TAttachMode {EExplicitAttach,EAutoAttach};

public:

      IMPORT_C TInt Share(TAttachMode aAttachMode=EExplicitAttach);

      IMPORT_C TInt Attach() const;

protected:

      inline TInt CreateSession(const TDesC& aServer,

           const TVersion& aVersion);

      IMPORT_C TInt CreateSession(const TDesC& aServer,

           const TVersion& aVersion,TInt aAsyncMessageSlots);

      IMPORT_C TInt Send(TInt aFunction,TAny* aPtr) const;

      IMPORT_C void SendReceive(TInt aFunction,TAny* aPtr,

           TRequestStatus& aStatus) const;

      IMPORT_C TInt SendReceive(TInt aFunction,TAny* aPtr) const;

      ……

};

 

Send操作只发送,发送完成就返回,要定义响应的SLOT;在收到回复后,会响应SLOT;最多同时255个异步信号(由内核决定,无法通过修改代码实现),超过数量会返回失败;

 

SendReceive:返回并且会等到回应结果;

 

Share:要允许Share 才行;Share 方式,第一次使用CreateSession,之后就应该调用Share.

 

l         RMessage – 服务端使用的收到客户端请求数据的类

l         DSession – Symbian 内核用来交互服务端和客户端的类

 

l         CSharableSession – 服务端连接的抽象类

 

l         CServer – 服务端从CActive 来的抽象类,用来收取内核的请求并分发到对应的 Session

在实现CServer之前一定要执行 Active Sheduler

 

Server工作函数是 RunL, 当有新连接时会调用纯虚函数NewSessionL

 

l         RSubSessionBase

客户端应该避免使用多个RSessionBase,因为这个会消耗系统资源,如果一定要使用多个,可以使用RSubSessionBase

方法和 RSessionBase 基本相同,但有一点不同时

 

 

 

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值