Symbian之client-server架构
2010-05-31 19:49:00 来源:WEB开发网virtual void ServiceL(const RMessage2& aMessage) =0;
这个是纯虚函数,所以派生类必须做实现。当Client在建立了和Server的连接后,会通过某个接口向Server发送数据请求等操作,Server 端的Session的虚函数ServiceL()会被调用,在参数RMessage2中会包括Client的请求信息。根据 aMessage.Function()的值做相应的处理。处理完后调用aMessage.Complete( KErrNone );来告知Client处理结束了,通常是增加请求线程上的信号量来告诉Client请求的完成。
NONSHARABLE_CLASS(CPtpSession) : public CSession2, MServiceHandlerObserver
{
public:
static CPtpSession* NewL(CPtpServer* aServer);
~CPtpSession();
void ServiceL( const RMessage2& aMessage );
…
}
既然,Server端有个Session,那么Client端也有个相应的Session了,答案是肯定的。它就是RSessionBase,它是Client端的Session句 柄,通过这个Client端的接口就可以和Server通信了。
class RSessionBase : public RHandleBase
{
friend class RSubSessionBase;
。。。
IMPORT_C TInt Open(RMessagePtr2 aMessage,TInt aParam,TOwnerType aType=EOwnerProcess);
IMPORT_C TInt Open(RMessagePtr2 aMessage,TInt aParam,const TSecurityPolicy& aServerPolicy,TOwnerType aType=EOwnerProcess);
IMPORT_C TInt Open(TInt aArgumentIndex, TOwnerType aType=EOwnerProcess);
IMPORT_C TInt Open(TInt aArgumentIndex, const TSecurityPolicy& aServerPolicy, TOwnerType aType=EOwnerProcess);
inline TInt SetReturnedHandle(TInt aHandleOrError);
IMPORT_C TInt SetReturnedHandle(TInt aHandleOrError,const TSecurityPolicy& aServerPolicy);
protected:
inline TInt CreateSession(const TDesC& aServer,const TVersion& aVersion);
IMPORT_C TInt CreateSession(const TDesC& aServer,const TVersion& aVersion,TInt aAsyncMessageSlots);
IMPORT_C TInt CreateSession(const TDesC& aServer,const TVersion&
更多精彩
赞助商链接