/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ #ifndef plStreamSource_h_inc #define plStreamSource_h_inc #include "hsStream.h" #include "hsStlUtils.h" // A class for holding and accessing file streams. The preloader will insert // files in here once they are loaded. In internal builds, if a requested file // is not found, it will be retrieved from disk. class plStreamSource { private: struct fileData { std::wstring fFilename; // includes path std::wstring fDir; // parent directory std::wstring fExt; hsStream* fStream; // we own this pointer, so clean it up }; std::map fFileData; // key is filename void ICleanup(); // closes all file pointers and cleans up after itself void IBreakupFilename(std::wstring filename, std::wstring& dir, std::wstring& ext); plStreamSource() {} public: ~plStreamSource() {ICleanup();} // Force a cleanup of all data (some apps need to get at those file again, and they can't while we have them open) void Cleanup() {ICleanup();} // File access functions hsStream* GetFile(std::wstring filename); // internal builds will read from disk if it doesn't exist std::vector GetListOfNames(std::wstring dir, std::wstring ext); // internal builds merge from disk // For other classes to insert files (takes ownership of the stream if successful) bool InsertFile(std::wstring filename, hsStream* stream); // Instance handling static plStreamSource* GetInstance(); }; #endif // plStreamSource_h_inc