Beispiel #1
0
DataStream* ResourceManager::GetResource(const char* ResRef, SClass_ID type, bool silent) const
{
	if (ResRef[0] == '\0')
		return NULL;

	if (!silent) {
		printMessage("ResourceManager", "Searching for %s.%s...", WHITE,
			ResRef, core->TypeExt(type));
	}

	FileStream *str = OpenCacheFile(ConstructFilename(ResRef, core->TypeExt(type)));
	if (str) {
		if (!silent)
			printStatus("Cache", GREEN );
		return str;
	}

	for (size_t i = 0; i < searchPath.size(); i++) {
		DataStream *ds = searchPath[i]->GetResource(ResRef, type);
		if (ds) {
			if (!silent) {
				printStatus( searchPath[i]->GetDescription(), GREEN );
			}
			return ds;
		}
	}
	if (!silent) {
		printStatus( "ERROR", LIGHT_RED );
	}
	return NULL;
}
Beispiel #2
0
HRESULT	KProcessPerfCacheMgr::Init(LPCWSTR strCacheFile, LPCWSTR urlMapName)
{
	m_strCacheFile = strCacheFile;
	m_strUrlMapName = urlMapName;

	if (!OpenCacheFile())
	{
		if (!CreateCacheFile())
		{
			kws_log(TEXT("KProcessPerfCacheMgr::Init try create cache file"));
			return E_FAIL;
		}
		if (!OpenCacheFile())
		{
			kws_log(TEXT("KProcessPerfCacheMgr::Init try open cache file 2 failed"));
			return E_FAIL;
		}
	}
	kws_log(TEXT("KProcessPerfCacheMgr::Init sucess"));
	return S_OK;
}
Beispiel #3
0
DataStream* ResourceManager::AddCacheFile(const char *filename)
{
	if (!core->GameOnCD)
		return FileStream::OpenFile(filename);

	char fname[_MAX_PATH];
	ExtractFileFromPath(fname, filename);

	FileStream *dest = OpenCacheFile(fname);

	// already in cache
	if (dest)
		return dest;

	FileStream* src = FileStream::OpenFile(fname);
	dest = CreateCacheFile(fname);

	if (!src || !dest) {
		printMessage("ResourceManager", "Failed to copy file '%s'\n", RED, fname);
		abort();
	}

	size_t blockSize = 1024 * 1000;
	char buff[1024 * 1000];
	do {
		if (blockSize > src->Remains())
			blockSize = src->Remains();
		size_t len = src->Read(buff, blockSize);
		size_t c = dest->Write(buff, len);
		if (c != len) {
			printMessage("ResourceManager", "Failed to write to file '%s'\n", RED, fname);
			abort();
		}
	} while (src->Remains());

	delete src;
	delete dest;

	return OpenCacheFile(fname);
}
Beispiel #4
0
DataStream *ResourceManager::AddCompressedCacheFile(DataStream *stream, const char* filename, int length, bool overwrite)
{
	if (!core->IsAvailable(PLUGIN_COMPRESSION_ZLIB)) {
		printMessage("ResourceManager", "No compression manager available.\nCannot load compressed file.\n", RED);
		return NULL;
	}

	char fname[_MAX_PATH];
	ExtractFileFromPath(fname, filename);

	FileStream *str = NULL;

	if (!overwrite)
		str = OpenCacheFile(fname);

	if (!str) {
		FileStream *out = CreateCacheFile(fname);

		if (!out) {
			printMessage("ResourceManager", "Failed to write to file '%s'.\n", RED, fname);
			return NULL;
		}

		PluginHolder<Compressor> comp(PLUGIN_COMPRESSION_ZLIB);
		if (comp->Decompress(out, stream, length) != GEM_OK) {
			delete out;
			return NULL;
		}

		delete out;
	} else {
		stream->Seek(length, GEM_CURRENT_POS);
	}

	delete str;

	return OpenCacheFile(fname);
}
Beispiel #5
0
Resource* ResourceManager::GetResource(const char* ResRef, const TypeID *type, bool silent) const
{
	if (ResRef[0] == '\0')
		return NULL;
	if (!silent) {
		printMessage("ResourceManager", "Searching for %s... ", WHITE, ResRef);
	}
	const std::vector<ResourceDesc> &types = PluginMgr::Get()->GetResourceDesc(type);

	for (size_t j = 0; j < types.size(); j++) {
		FileStream *str = OpenCacheFile(ConstructFilename(ResRef, types[j].GetExt()));
		if (str) {
			Resource *res = types[j].Create(str);
			if (!silent) {
				print( "%s.%s...", ResRef, types[j].GetExt() );
				printStatus("Cache", GREEN);
			}
			return res;
		}
	}

	for (size_t j = 0; j < types.size(); j++) {
		for (size_t i = 0; i < searchPath.size(); i++) {
			DataStream *str = searchPath[i]->GetResource(ResRef, types[j]);
			if (str) {
				Resource *res = types[j].Create(str);
				if (res) {
					if (!silent) {
						print( "%s.%s...", ResRef, types[j].GetExt() );
						printStatus( searchPath[i]->GetDescription(), GREEN );
					}
					return res;
				}
			}
		}
	}
	if (!silent) {
		print("Tried ");
		PrintPossibleFiles(ResRef,type);
		printStatus( "ERROR", LIGHT_RED );
	}
	return NULL;
}