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

Symbian OS中的Client/Server机制分析

 2010-09-06 08:10:00 来源:WEB开发网   
核心提示:Session,触发一个请求,Symbian OS中的Client/Server机制分析(9),然后调用AO基类的方法SetActive()激活自己,8,这里的分析忽略的所有的错误处理的流程,具体的处理请参考相应的代码,Client端的Session通过调用 SendReceive( ETimeServRequestT
Session,触发一个请求,然后调用AO基类的方法SetActive()激活自己。

8,Client端的Session通过调用 SendReceive( ETimeServRequestTime, args, aStatus ) 这个API向Server发出请求,其中的args是一个TIpcArgs 的类型参数。Server端的Session阻塞在ServiceL() 处等待Client的请求,然后根据aMessage.Function()的值分别进行处理。以case ETimeServRequestTime为例子,先在server端保留一份消息的内容--iMessage,然后向Server请求它的 CHeartbeat,然后会调用iHeartbeat->Start( ETwelveOClock, this );来启动heartbeat

9,当请求的完成是会调用接口类MBeating的方法virtual void Beat() =0; 也即Server重载的方法。在SendTimeToSessions中会向iSessionIter这个队列的第一个Session发出回应,通过 Server端Session的session->SendTimeToClient();方法,具体的动作是调用保存的消息的Write方法,即 iMessage.WriteL( 0, ptr, 0 ) 来传递给Client并调用iMessage.Complete( ETimeServRequestTimeComplete ); 来标称服务的完成。

10,Client端的Handle的AO的 RunL()会被调用根据 iMessage.Complete()中参数进行相应的处理。首先是iObserver.HandleTimeUpdate(); 也就是CCSAsyncAppUi::HandleTimeUpdate(),这个方法直接会调用iAppView->DrawNow();在 view的Draw()方法里面会取 iDocument.Time(),实际上是取的iHandler->Time(),即Handle的成员TTime iTime;

11,一次请求完成之后在Handle中会调用RequestTime(); 再次出发请求。一个完成的Client/Server的交互就这样结束了。

这里的分析忽略的所有的错误处理的流程,具体的处理请参考相应的代码。其实错误处理非常重要。

上一页  4 5 6 7 8 9 

Tags:Symbian OS Client

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