WEB开发网
开发学院手机开发Symbian 开发 Symbian之client-server架构 阅读

Symbian之client-server架构

 2010-05-31 19:49:00 来源:WEB开发网   
核心提示:要的时候,即当有Client发出request的时候再启动server,Symbian之client-server架构(3),我们就需要在ConstructL()中手动调用这个函数了,IMPORT_C virtual CSession2* NewSessionL(const TVersion& aVersion,con
要的时候,即当有Client发出request的时候再启动server,我们就需要在ConstructL()中手动调用这个函数了。

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(this));

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);

...

...

};

上一页  1 2 3 4 5 6  下一页

Tags:Symbian client server

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