WEB开发网
开发学院手机开发Symbian 开发 Symbian OS中的Client/Server机制分析 阅读

Symbian OS中的Client/Server机制分析

 2010-09-06 08:10:00 来源:WEB开发网   
核心提示:一般,系统的服务器,Symbian OS中的Client/Server机制分析(4),比如:文件服务器,字体和位图服务器和窗口服务器等都是在系统启动的时候就启动了,CSession2 服务器端的客户Session, 充当 Client和Server 的通信信道,但是,如果我们自己的服务器不希望如此

一般,系统的服务器,比如:文件服务器,字体和位图服务器和窗口服务器等都是在系统启动的时候就启动了。但是,如果我们自己的服务器不希望如此,只是在必要的时候,即当有Client发出request的时候再启动 server,我们就需要在ConstructL()中手动调用这个函数了。

IMPORT_C virtual CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const =0;

岽唇ㄒ桓鲇erver端的Session,这个Session代表一个Client和一个Server的通信连接,它可以通过RSessionBase:: CreateSession() 的调用来创建和初始化。也就是说,如果Client端调用了RSessionBase::CreateSession(),那么Server端的 NewSessionL就会被调用。猜测下Server的实现如下:当Client端调用了RSessionBase::CreateSession (),内核找到相应的Server,然后Server线程的AS会check这个Client在Server端有没有对应的Session,如果没有就调用NewSessionL来创建一个Session。Client和Server后续的数据操作都通过这个Session来完成。

当我们在设计自己的Server的时候,我们需要从CServer2类继承,CServer2是一个AO是从CActive派生的,他实现了CActive 的几个纯虚/虚函数,我们的Server类必须实现NewSessionL这个纯虚函数,当然如果你仅仅实现这个也是useless的。一般我们会重写 CServer2的RunError的实现,但是不会去重写RunL和DoCancel方法。

通常,我们给Server传递一个请求,让Server做某些修改后在回传给我们,所以在SendReceive函数中不要传递局部变量的描述符,通常是用一个data member来做。

CSession2 服务器端的客户Session, 充当 Client和Server 的通信信道,一个Client线程能和一个Server并发多个线程。

/**

A session can be:

- restricted to the creating thread

- can be shared with other threads in the same process

- can be shared by all threads in the system.

A server must define and implement a derived class. In particular, it must provide an implementation for the ServiceL() virtual function.

(Note that this class should be used instead of CSession)

*/

class CSession2 : public CBase

{

public:

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Symbian OS Client

编辑录入:coldstar [复制链接] [打 印]
赞助商链接