原创  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 基本相同,但有一点不同时

 

 

发表于 @ 2009年02月10日 16:42:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:Symbian 学习日志(九、线程和进程) | 新一篇:用mysqldump对MySQL数据库进行数据备份与恢复

  • 发表评论
  • 评论内容:
  •  
Copyright © fz_zhou
Powered by CSDN Blog