123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- #ifndef __AssetsManagerEx__
- #define __AssetsManagerEx__
- #include <string>
- #include <unordered_map>
- #include <vector>
- #include "base/CCEventDispatcher.h"
- #include "platform/CCFileUtils.h"
- #include "network/CCDownloader.h"
- #include "CCEventAssetsManagerEx.h"
- #include "Manifest.h"
- #include "extensions/ExtensionMacros.h"
- #include "extensions/ExtensionExport.h"
- #include "json/document-wrapper.h"
- NS_CC_EXT_BEGIN
- class CC_EX_DLL AssetsManagerEx : public Ref
- {
- public:
-
-
- enum class State
- {
- UNCHECKED,
- PREDOWNLOAD_VERSION,
- DOWNLOADING_VERSION,
- VERSION_LOADED,
- PREDOWNLOAD_MANIFEST,
- DOWNLOADING_MANIFEST,
- MANIFEST_LOADED,
- NEED_UPDATE,
- UPDATING,
- UNZIPPING,
- UP_TO_DATE,
- FAIL_TO_UPDATE
- };
-
- const static std::string VERSION_ID;
- const static std::string MANIFEST_ID;
-
-
- static AssetsManagerEx* create(const std::string &manifestUrl, const std::string &storagePath);
-
-
- void checkUpdate();
-
-
- void update();
-
-
- void downloadFailedAssets();
-
-
- State getState() const;
-
-
- const std::string& getStoragePath() const;
-
-
- const Manifest* getLocalManifest() const;
-
-
- const Manifest* getRemoteManifest() const;
-
-
- const int getMaxConcurrentTask() const {return _maxConcurrentTask;};
-
-
- void setMaxConcurrentTask(const int max) {_maxConcurrentTask = max;};
-
-
- void setVersionCompareHandle(const std::function<int(const std::string& versionA, const std::string& versionB)>& handle) {_versionCompareHandle = handle;};
-
-
- void setVerifyCallback(const std::function<bool(const std::string& path, Manifest::Asset asset)>& callback) {_verifyCallback = callback;};
-
- CC_CONSTRUCTOR_ACCESS:
-
- AssetsManagerEx(const std::string& manifestUrl, const std::string& storagePath);
-
- virtual ~AssetsManagerEx();
-
- protected:
-
- std::string basename(const std::string& path) const;
-
- std::string get(const std::string& key) const;
-
- void initManifests(const std::string& manifestUrl);
-
- void loadLocalManifest(const std::string& manifestUrl);
-
- void prepareLocalManifest();
-
- void setStoragePath(const std::string& storagePath);
-
- void adjustPath(std::string &path);
-
- void dispatchUpdateEvent(EventAssetsManagerEx::EventCode code, const std::string &message = "", const std::string &assetId = "", int curle_code = 0, int curlm_code = 0);
-
- void downloadVersion();
- void parseVersion();
- void downloadManifest();
- void parseManifest();
- void startUpdate();
- void updateSucceed();
- bool decompress(const std::string &filename);
- void decompressDownloadedZip(const std::string &customId, const std::string &storagePath);
-
-
- void updateAssets(const DownloadUnits& assets);
-
-
- const DownloadUnits& getFailedAssets() const;
-
-
- void destroyDownloadedVersion();
-
-
- void queueDowload();
-
- void fileError(const std::string& identifier, const std::string& errorStr, int errorCode = 0, int errorCodeInternal = 0);
-
- void fileSuccess(const std::string &customId, const std::string &storagePath);
-
-
- virtual void onError(const network::DownloadTask& task,
- int errorCode,
- int errorCodeInternal,
- const std::string& errorStr);
-
-
- virtual void onProgress(double total, double downloaded, const std::string &url, const std::string &customId);
-
-
- virtual void onSuccess(const std::string &srcUrl, const std::string &storagePath, const std::string &customId);
-
- private:
- void batchDownload();
-
- void onDownloadUnitsFinished();
-
-
- std::string _eventName;
-
-
- EventDispatcher *_eventDispatcher;
-
- FileUtils *_fileUtils;
-
-
- State _updateState;
-
-
- std::shared_ptr<network::Downloader> _downloader;
-
-
- const std::unordered_map<std::string, Manifest::Asset> *_assets;
-
-
- std::string _storagePath;
-
-
- std::string _tempStoragePath;
-
-
- std::string _tempVersionPath;
-
-
- std::string _cacheManifestPath;
-
-
- std::string _tempManifestPath;
-
-
- std::string _manifestUrl;
-
-
- Manifest *_localManifest;
-
-
- Manifest *_tempManifest;
-
-
- Manifest *_remoteManifest;
-
-
- enum class UpdateEntry : char
- {
- NONE,
- CHECK_UPDATE,
- DO_UPDATE
- };
- UpdateEntry _updateEntry;
-
-
- DownloadUnits _downloadUnits;
-
-
- DownloadUnits _failedUnits;
-
-
- std::vector<std::string> _queue;
-
-
- int _maxConcurrentTask;
-
-
- int _currConcurrentTask;
-
-
- float _percent;
-
-
- float _percentByFile;
-
-
- int _totalEnabled;
-
-
- int _sizeCollected;
-
-
- double _totalSize;
-
-
- std::unordered_map<std::string, double> _downloadedSize;
-
-
- int _totalToDownload;
-
- int _totalWaitToDownload;
-
- float _nextSavePoint;
-
-
- std::function<int(const std::string& versionA, const std::string& versionB)> _versionCompareHandle;
-
-
- std::function<bool(const std::string& path, Manifest::Asset asset)> _verifyCallback;
-
-
- bool _inited;
- };
- NS_CC_EXT_END
- #endif
|