首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Symbian >> Symbian开发 >> 正文
Symbian OS:活动对象与活动调度器(6)
作者:Nokia    文章来源:Nokia    更新时间:2006-2-6 11:28:18

4.2.3 请求文档

当 socket 得到了对网络的连接后,它将该引擎的 iStatus 设定为 KErrNone,表 示已经建立了这种连接,现在可以读写了
AS :  Engine :   : RSocket
CActiveScheduler
CAOExampleEngine

RunReadyAOs( )
... AS runs other active objects. When engine gets ready it
is scheduled to run ...
...RSocket processes request in server thread asynchronously...
SetStatusAndNotify(KErrNone)

ProcessRequest( )

RunReadyAOs( )
RunL( )

MakeHTTPRequest( )


iState = EWriting

Write(httpRequest, iStatus)

SetActive( )
ProcessRequest( )


4.2.4 读文档

当 socket 向 Web 服务器写入了 HTTP 请求之后,它将引擎的 iStatus 设定为 KErrNone(请见图
9)。活动调度器会调用该引擎的 RunL()。现在引擎请求这个 socket 读取 Web 服务器对缓冲区的响应。然后引擎激活自己,并从
RunL()方法返 回。

socket 服务器读取来自 socket 的数据,并当发生异步方法调用时将其填入到给定的 缓冲区中。当缓冲区满时,它将引擎的 iStatus 设定为
KErrNone。活动调度器运 行该引擎,而后者则将读入的数据从缓冲区复制到动态缓冲区,发起一轮新的读操 作,激活该引擎,然后返回。

AS :  Engine :   : RSocket
CActiveScheduler
CAOExampleEngine

RunReadyAOs( )

ProcessRequest( )


... AS runs other active objects. When engine gets ready it
is scheduled to run ...

...RSocket processes request in server thread asynchronously...

SetStatusAndNotify(KErrNone)

RunReadyAOs( )
RunL( )

ReadHTTPResponse(TRUE)
iState = EReading

RecvOneOrMore(buf,iStatus)

SetActive( )
ProcessRequest( )
这个循环周而复始,直到 Web 服务器中没有更多的数据时,它就关闭这个 socket。 当 socket 服务器发现,该 socket
的远端已经被关闭了,它就将该引擎的 iStatus 设定为 KErrEof,这表示:在那个 socket 中已经没有任何数据了(见图 10)。

引擎向动态缓冲区复制剩下的数据,并通知用户界面,文件已经取到。由于引擎已 经完成了文件抓取,它不会发出任何异步请求,也不会激活自己。在引擎从
RunL() 中返回之前,它对自己进行重新设定,使得 socket 关闭。然后引擎就可以为下一个 FetchFileL()方法调用提供服务了。

AS :  Engine :   : RSocket
CActiveScheduler
CAOExampleEngine

RunReadyAOs( )

ProcessRequest( )


... AS runs other active objects. When engine gets ready it
is scheduled to run ...

...RSocket processes request in server thread asynchronously...

SetStatusAndNotify(KErrEof)

 

RunReadyAOs( )


RunL( )

 

ReadHTTPResponse(FALSE)


Reset( )

4.3 引擎的解构

当不再需要引擎时,一般情况下用 delete 关键字将其删除。而引擎的解构器(请见图 11) 从活动调度器的活动对象队列中移除这个引擎。这个活动对象的
Deque()方法调用 Cancel(),而后者调用 DoCancel()。对 reset()的调用得到了实现,这确保了任何等待
中的请求都会被删除,且 socket(可能打开着)被关闭掉。最后,主机解析器及在构造时所 创建的 socket 服务器也都被关闭了。

Application Engine SocketServ HostResolver ActiveScheduler

~CAOExampleEngine( )

Deque( )

Cancel( )
DoCancel( )

Reset( )

 

Remove(this)

Close()

Close( )

相关文章:
symbian应用引擎开发
通过Tuny Engine Lite 使你的手机游戏更加负有激情
Symbian程序中的观察者模式
S60 Python 编程指南——蓝牙连接( 手机到PC)
检查离线模式
Symbian多平台游戏引擎开发日记 2006-7-24
Symbian多平台游戏引擎开发日记 2006-6-12
Symbian中同步socket用法
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号