亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

第二人生的源碼分析(四十四)虛擬文件系統的請求

系統 2070 0
在虛擬文件系統的消息隊列里,主要就是LLVFSThread::Request類的請求,Request類是嵌套類,定義在LLVFSThread類里面。它主要實現對類LLVFS的封裝訪問,讓操作更加方便一些,當然它是繼續QueuedRequest類的,這樣才可以添加到消息隊列里去,否則不能添加到這個消息隊列容器,也不能實現請求處理的多態了。
?
下面是類Request的構造函數。
#001?LLVFSThread::Request::Request(handle_t handle, U32 priority, U32 flags,
#002? ?????????????????????????????????????????????? ??operation_t op, LLVFS* vfs,
#003? ?????????????????????????????????????????????? ??const LLUUID &file_id, const LLAssetType::EType file_type,
#004? ?????????????????????????????????????????????? ??U8* buffer, S32 offset, S32 numbytes) :
#005? ???? QueuedRequest(handle, priority, flags),
#006? ???? mOperation(op),
#007? ???? mVFS(vfs),
#008? ???? mFileID(file_id),
#009? ???? mFileType(file_type),
#010? ???? mBuffer(buffer),
#011? ???? mOffset(offset),
#012? ???? mBytes(numbytes),
#013? ???? mBytesRead(0)
#014?{
#015? ???? llassert(mBuffer);
#016?
?
判斷是否非法出錯。
#017? ???? if (numbytes <= 0 && mOperation != FILE_RENAME)
#018? ???? {
#019? ??????????? llwarns << "LLVFSThread: Request with numbytes = " << numbytes
#020? ?????????????????? << " operation = " << op
#021? ?????????????????? << " offset " << offset
#022? ?????????????????? << " file_type " << file_type << llendl;
#023? ???? }
?
寫數據到虛擬文件系統。
#024? ???? if (mOperation == FILE_WRITE)
#025? ???? {
#026? ??????????? S32 blocksize =?mVFS->getMaxSize(mFileID, mFileType);
#027? ??????????? if (blocksize < 0)
#028? ??????????? {
#029? ?????????????????? llwarns << "VFS write to temporary block (shouldn't happen)" << llendl;
#030? ??????????? }
#031? ??????????? mVFS->incLock(mFileID, mFileType, VFSLOCK_APPEND);
#032? ???? }
?
重新命名文件名稱。
#033? ???? else if (mOperation == FILE_RENAME)
#034? ???? {
#035? ??????????? mVFS->incLock(mFileID, mFileType, VFSLOCK_APPEND);
#036? ???? }
?
從虛擬文件系統里讀取數據。
#037? ???? else // if (mOperation == FILE_READ)
#038? ???? {
#039? ??????????? mVFS->incLock(mFileID, mFileType, VFSLOCK_READ);
#040? ???? }
#041?}
#042?
?
下面的函數是正式開始操作虛擬文件系統,
#001?bool LLVFSThread::Request::processRequest()
#002?{
#003? ???? bool complete = false;
?
如果是讀取操作,就調用虛擬文件系統的getData函數來讀取數據。
#004? ???? if (mOperation ==?FILE_READ)
#005? ???? {
#006? ??????????? llassert(mOffset >= 0);
#007? ??????????? mBytesRead = mVFS->getData(mFileID, mFileType, mBuffer, mOffset, mBytes);
#008? ??????????? complete = true;
#009? ??????????? //llinfos << llformat("LLVFSThread::READ '%s': %d bytes arg:%d",getFilename(),mBytesRead) << llendl;
#010? ???? }
?
如果是寫數據,就調用虛擬文件系統的storeData函數來寫數據。
#011? ???? else if (mOperation ==?FILE_WRITE)
#012? ???? {
#013? ??????????? mBytesRead = mVFS->storeData(mFileID, mFileType, mBuffer, mOffset, mBytes);
#014? ??????????? complete = true;
#015? ??????????? //llinfos << llformat("LLVFSThread::WRITE '%s': %d bytes arg:%d",getFilename(),mBytesRead) << llendl;
#016? ???? }
?
如果是重新命名文件名稱,就調用虛擬文件系統的函數renameFile。
#017? ???? else if (mOperation ==?FILE_RENAME)
#018? ???? {
#019? ??????????? LLUUID* new_idp = (LLUUID*)mBuffer;
#020? ??????????? LLAssetType::EType new_type = (LLAssetType::EType)mBytes;
#021? ??????????? mVFS->renameFile(mFileID, mFileType, *new_idp, new_type);
#022? ??????????? mFileID = *new_idp;
#023? ??????????? complete = true;
#024? ??????????? //llinfos << llformat("LLVFSThread::RENAME '%s': %d bytes arg:%d",getFilename(),mBytesRead) << llendl;
#025? ???? }
#026? ???? else
#027? ???? {
#028? ??????????? llerrs << llformat("LLVFSThread::unknown operation: %d", mOperation) << llendl;
#029? ???? }
#030? ???? return complete;
#031?}
?
通過上面函數調用,就把其它對虛擬文件系統的操作轉換為對成員mVFS的操作,這樣就非常方便系統的更新,容易增加新的功能。

第二人生的源碼分析(四十四)虛擬文件系統的請求處理


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99热久久国产精品免费看 | 国产在线麻豆一区二区 | 97影院理论午夜论不卡 | 久草手机视频在线 | 国产在线精品一区二区三区 | 日韩a一级欧美一级 | 内部片免费一区 | 女人隐私秘视频黄www免费 | 日本一级毛片大片免费 | 亚洲精品一区二区久久 | 国产亚洲精aa在线观看香蕉 | 日日夜夜摸 | 亚洲网在线 | 免费看成人国产一区二区三区 | 91在线视频免费播放 | 在线欧美一级毛片免费观看 | 国产欧美日韩综合精品一区二区 | 毛片免费全部播放一级 | 国产美女流白浆的免费视 | 久久免费视频观看 | 国内久久精品视频 | 欧美日韩加勒比一区二区三区 | 亚洲一在线| 国产婷婷一区二区三区 | 天天操天天射天天操 | 久久国产免费福利永久 | 免费不卡毛片 | 亚欧有色亚欧乱色视频 | 国产精品一区二区不卡 | 91精品久久久久久久久久小网站 | 欧美在线视频a | 成人免费毛片视频 | 中文字幕日韩精品亚洲七区 | 91精品免费高清在线 | 在线观看精品国内福利视频 | 亚洲中午字幕 | 中文字幕日本不卡 | 国产三级久久久精品三级 | 大乳女做爰中文字幕 | 国产99久久亚洲综合精品 | 91视频观看|