Symbian OS中的Client/Server机制分析
2010-09-06 08:10:00 来源:WEB开发网RMessage2 这个类封装了Client请求的细节,在Client和Server端传递。
/**
An object that encapsulates the details of a client request.
*/
class RMessage2 : public RMessagePtr2
{
friend class CServer2;
#endif
inline TInt Function() const;
inline TInt Int0() const;
inline TInt Int1() const;
inline TInt Int2() const;
inline TInt Int3() const;
inline const TAny* Ptr0() const;
inline const TAny* Ptr1() const;
inline const TAny* Ptr2() const;
inline const TAny* Ptr3() const;
inline CSession2* Session() const;
protected:
/**
The request type.
*/
TInt iFunction;
};
这里的 Function ()对应于RSessionbase:: SendReceive (TInt aFunction,const TIpcArgs& aArgs,TRequestStatus& aStatus) 中的aFunction。Client端通过TIpcArgs这个结构包装数据向Server发送请求,TIpcArgs 支持0到4个参数,最多只能是4个,如果参数是简单的整型值我们可以通过RMessage2的Int0-3这些个API得到他们的值,如果是其他类新,比如是描述符,那么就的用Ptr0-3()来获得指针了。系统内部会把TIpcArgs的内容封装成RMessage2,并在Server端相应 Session的ServiceL()中进行解析。
四,实例剖析
下面以SDK中附带的example--ClientServerAsync来阐述一下Client/Server的流程。
1,在csayncdocument.cpp 的CEikAppUi* CCSAsyncDocument::CreateAppUiL()中会调用CCSAsyncRequestHandler::NewL( *appUi ) 来实例化 CCSAsyncRequestHandler,这个 handler是个AO,它拥有一个 RTimeServerSession iSession数据成员, RTimeServerSession继承自客户端的Session类 RSessionBase。这ConstructL()中会调用iSession.Connect() ;
2, RTimeServerSession的Connet() 方法会连接到Server并且创建一个Session。它首先调用一个静态函数StartServer()
更多精彩
赞助商链接