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

Symbian OS中的Client/Server机制分析

 2010-09-06 08:10:00 来源:WEB开发网   
核心提示:,其中会通过TFindServer的方法来来检测Server是否启动,Symbian OS中的Client/Server机制分析(8),如果没有则会调用RProcess的Create() 方法来启动这个新的进程,通过Server的名字,会调用 AsyncDocument()->UpdateTime();在Docu
,其中会通过TFindServer的方法来来检测Server是否启动,如果没有则会调用RProcess的Create() 方法来启动这个新的进程,通过Server的名字,如果这个名字没有追加.exe那么API会帮你做这个事情,如果没有指明这个可执行文件的绝对路径,那么系统会在所有的sysin目录下找,我们还会传入和可执行文件匹配的UID3。

3, Server的启动,server的TInt E32Main()作为程序的入口开始run,在Server的ThreadFunctionL()中,首先会创建一个CActiveScheduler --活动对象调度器,例子里面的Server--CTimeServer从CServer2继承,而CServer2是一个活动对象,所以 CTimeServer也是一个封装后的活动对象。

4,在CTimeServer::ThreadFunctionL() 中调用CTimeServer::NewLC() 来构造Server,在 CTimeServer的ConstructL()中调用基类CServer2的方法StartL() 来启动AO,在这个方法里面,我们猜测会发一个请求,等待Client端的连接,并调用AO的基类CActive的方法SetActive来表明他触发了一个请求。然后,会调用CActiveScheduler::Start()让AS来处理请求。此时的Server已经启动完毕,等待Client发出创建 Session的请求。

5,Client在RTimeServerSession::Connect()里面继续调用RSessionBase重载的方法之一CreateSession()来创建一个Client端的Session来和Server通信。

6,Server 的AS在收到这个请求后,会调用CServer2这个AO的RunL(),在这个函数里面会调用它的一个需要派生类做实现的虚接口 NewSessionL() (此处是猜测CServer2的实现),在这个函数里面Server会用CTimeServerSession::NewL()创建一个表示这个Client连接的Session。此时 Client和Server端连接的通道,两个Session的实例都已创建,Client和Server可以通信了。

Client 的Session是从RSessionBase继承的,由一个handler(其实它是一个AO)拥有;Server端的Sessin是从 CSession2继承的,它有Server创建,然后会放到CServer2的这个数据成员里面:TDblQueIter< CSession2> iSessionIter;而CServer2,则又是一个AO。这里是否可以简单的理解为AO来使用Session??

7,此时Server已经启动,Client也启动了,Client和Server的通信线路也已经建立起来了。在Appui里面点菜单启动时钟,会调用 AsyncDocument()->UpdateTime();在Document里面会调用iHandler->RequestTime (); Handler这个AO,首先会检测自己是否还处于活动状态(通过AO的基类方法IsActive()),如果没有的话,就通过Client端的

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

Tags:Symbian OS Client

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