BOOL OAPIServer::ProcessGetDisk(s32 len) { if (len == 0) { return FALSE; } char *pRecv = new char[len + 1]; s32 nRetBody = m_pSocket->Recv((void *)pRecv, len); oapi::OAPIDiskListReq req; if (nRetBody == len) { autojsoncxx::ParsingResult result; if (!autojsoncxx::from_json_string(pRecv, req, result)) { std::cerr << result << '\n'; delete [] pRecv; return FALSE; } } oapi::OAPIDiskListRsp dataList; VDBDiskMap diskMap; m_pFactory.GetDiskMap(diskMap); VDBDiskMap::iterator it = diskMap.begin(); for(; it!=diskMap.end(); ++it) { oapi::OAPIDisk oapiDisk; oapiDisk.strId = (*it).second.hdd; oapiDisk.strPath = (*it).second.path; oapiDisk.nTotalSize = 0; oapiDisk.nFreeSize = 0; oapiDisk.nStorSize = (*it).second.limit; dataList.list.push_back(oapiDisk); } std::string strJson = autojsoncxx::to_pretty_json_string(dataList); s32 nJsonLen = strJson.length(); if (nJsonLen <= 0) { return FALSE; } OAPIHeader header; header.cmd = htonl(OAPI_CMD_DISK_LIST_RSP); header.length = htonl(nJsonLen + 1); m_pSocket->Send((void *)&header, sizeof(header)); m_pSocket->Send((void *)strJson.c_str(), nJsonLen + 1); return TRUE; }
inline void FactoryHddTask::run() { VDBDiskMap mapDisk; VDBDiskStatus mapStatus; while(1) { mapDisk.clear(); mapStatus.clear(); /* Get Diskmap */ m_Factory.GetDiskMap(mapDisk); /* loop to find a good disk */ for (VDBDiskMap::iterator it = mapDisk.begin(); it != mapDisk.end(); it++) { QString path((*it).second.path.c_str()); QStorageInfo info(path); VdbDiskStatus status; status.status = HDD_DISK_ERROR; status.hdd = (*it).second.hdd; status.path = (*it).second.path; if (info.isValid() == true && info.isReady() == true) { status.status = HDD_DISK_OK; } if (info.isReadOnly() == true) { status.status = HDD_DISK_READ_ONLY; } status.freeSize = info.bytesAvailable()/1024; status.totalSize = info.bytesTotal()/1024; mapStatus[(*it).second.hdd] = status; VDC_DEBUG("HDD %s path %s freeSize %lld\n", ((*it).first).c_str(), (*it).second.path.c_str(), status.freeSize); } m_Factory.UpdateDiskStatusMap(mapStatus); #ifdef WIN32 Sleep(1000 * 2); #else sleep(2); #endif } }