Symbian OS中的Client/Server机制分析
2010-09-06 08:10:00 来源:WEB开发网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的交互就这样结束了。
这里的分析忽略的所有的错误处理的流程,具体的处理请参考相应的代码。其实错误处理非常重要。
更多精彩
赞助商链接