Symbian之client-server架构
2010-05-31 19:49:00 来源:WEB开发网IMPORT_C virtual CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const =0;
server端的Session,这个Session代表一个Client和一个Server的通信连接,它可以通过 RSessionBase::CreateSession() 的调用来创建和初始化。也就是说,如果Client端调用了RSessionBase::CreateSession(),那么Server端的 NewSessionL就会被调用。Client和Server后续的数据操作 都通过这个Session来完成。
当我们在设计自己的Server的时候,我们需要从CServer2类继承,CServer2是一个AO是从CActive派生的,他实现了 CActive的几个纯虚/虚函数,我们的Server类必须实现NewSessionL这个纯虚函数,当然如果你仅仅实现这个也是useless的。一 般我们会重写CServer2的RunError的实现,但是不会去重写RunL和DoCancel方法。
CSession2* CPtpServer::NewSessionL(const TVersion& aVersion,
const RMessage2& /*aMessage*/) const
{
...
CPtpSession* session =
CPtpSession::NewL(const_cast
return session;
}
通常,我们给Server传递一个请求,让Server做某些修改后在回传给我们,所以在SendReceive函 数中不要传递局部变量的描述符,通常是用一个data member来做。
CSession2服务器端的客户Session,充当Client和Server的通信信道,一个Client线程能和一个 Server并发多个线程。
class CSession2 : public CBase
{
public:
IMPORT_C virtual ~CSession2() =0;
public:
inline const CServer2* Server() const;
IMPORT_C void ResourceCountMarkStart();
IMPORT_C void ResourceCountMarkEnd(const RMessage2& aMessage);
IMPORT_C virtual TInt CountResources();
virtual void ServiceL(const RMessage2& aMessage) =0;
IMPORT_C virtual void ServiceError(const RMessage2& aMessage,TInt aError);
...
...
};
更多精彩
赞助商链接