Example #1
0
IHM::IHM() //: _LinesL_b(sf::PrimitiveType::Lines, 256), _LinesR_b(sf::PrimitiveType::Lines, 256),_LinesL_h(sf::PrimitiveType::Lines, 256),_LinesR_h(sf::PrimitiveType::Lines, 256)
{
    initComponent();
    manager.loadMusicFromFolder("./playMe");
    manager.getAllFiles(_files);

    _listfilesHolder->Remove( _listFiles );
    _listFiles = sfg::Box::Create( sfg::Box::Orientation::VERTICAL,5.f );
    for(std::vector<File>::iterator it = _files.begin() ; it != _files.end(); ++it)
        packFile(*it);
    _listfilesHolder->AddWithViewport( _listFiles );
}
Example #2
0
void IHM::OnLoadBtnClick()
{
    manager.loadMusicFromFolder(_entryLoader->GetText(), _iterateSubFolders->IsActive());//load
    manager.getAllFiles(_files);

    _listfilesHolder->Remove( _listFiles );
    _listFiles = sfg::Box::Create( sfg::Box::Orientation::VERTICAL,5.f);
    auto box = sfg::Box::Create( sfg::Box::Orientation::HORIZONTAL, 300.f);
    _listFiles->Pack( box, false);
    for(std::vector<File>::iterator it = _files.begin() ; it != _files.end(); ++it)
        packFile(*it);
    _listfilesHolder->AddWithViewport( _listFiles );
}
void sendFileToReduce(char* fileName, char* content, struct in_addr ipJob, t_connection connection, int puertoNodo)
{
	t_header header;
	void* message;
	int contentLength = strlen(content) + 1;
	int messageLength = sizeof(t_header) + contentLength + sizeof(int) * 2 + strlen(fileName) + 1 + sizeof(struct in_addr);

	header.tipoMensaje = EnvioArchivoAReducir;
	header.tamanioMensaje = messageLength - sizeof(t_header);

	message = malloc(messageLength);

	packHeader(header, message);

	packFile(fileName, content, contentLength, message);

	int offset = messageLength - sizeof(struct in_addr);
	memcpy(message + offset, (struct in_addr*) &ipJob, sizeof(struct in_addr));

	int sock;

	if((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
			perror("socket");
			exit(1);
	}

	struct sockaddr_in addr;

	addr = connection.connectionAddr;
	addr.sin_port = puertoNodo;

	if(connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == -1)
		{
			perror("connect");
			exit(1);
		}

	sendAll(sock, message, messageLength);

	return;
}
void sendFileContent(char* fileName, char* content, struct in_addr ip, int puerto)
{
	t_header header;
	void* message;
	int contentLength = strlen(content) + 1;
	int messageLength = sizeof(t_header) + contentLength + sizeof(int) * 2 + strlen(fileName) + 1;

	header.tipoMensaje = EnvioArchivo;
	header.tamanioMensaje = messageLength - sizeof(t_header);

	message = malloc(messageLength);

	packHeader(header, message);

	packFile(fileName, content, contentLength, message);

	int sock;

		if((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
		{
				perror("socket");
				exit(1);
		}

		struct sockaddr_in addr;

		addr.sin_addr = ip;
		addr.sin_family = AF_INET;
		addr.sin_port = puerto;
		memset(&(addr.sin_zero), '\0', 8);

		//Conecto al socket al FileSystem para notificar conexion del nodo
		if(connect(sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) == -1)
			{
				perror("connect");
				exit(1);
			}

	sendAll(sock, message, messageLength);

	return;
}
Example #5
0
	shared_ptr<CMabiFileSystem> CMabiFileSystem::CreateByPackFile(const wstring& path)
	{
		shared_ptr<CMabiFileSystem> spFileSystem(new CMabiFileSystem);

		shared_ptr<CMabiFile> spRootFile = static_pointer_cast<CMabiFile>(spFileSystem->GetRoot());

		shared_ptr<CFileWithPool> spFilePool(new CFileWithPool(path));

		ifstream packFile(path, ios::binary | ios::in);

		_s_pack_header header;
		packFile.read(reinterpret_cast<char *>(&header), sizeof(header));
		if (memcmp(header.signature, "PACK", 4) != 0)
		{
			throw logic_error("this file is not a mabinogi pack file.");
		}

		_s_pack_list_header list_header;
		packFile.read(reinterpret_cast<char *>(&list_header), sizeof(list_header));

		// 加载到内存
		char * p_list_buffer = new char[list_header.list_header_size];
		packFile.read(p_list_buffer, list_header.list_header_size);



		char * p_tmp = p_list_buffer;

		for (unsigned long i = 0; i < list_header.sum; i++)
		{
			// 准备内容
			shared_ptr<CMabiFile> file = spFileSystem->CreateFile();

			_s_pack_item_name * p_item_name = (_s_pack_item_name *) p_tmp;
			int size;
			if (p_item_name->len_or_type < 4)
			{
				// 第一字节小于4
				size = (0x10 * (p_item_name->len_or_type + 1));
			}
			else if (p_item_name->len_or_type == 4)
			{
				// 可恶的恶魔猫,这里怎么要搞特殊的
				size = 0x60 ;
			}
			else
			{
				// 基本参考mabiunpack代码
				size = p_item_name->len + 5;
			}

			// 下面其实存在溢出可能,但是目前应该没有这么长的目录
			wstring fullPath;
			if ( p_item_name->len_or_type <= 0x04 )
			{
				fullPath = _ansi2unicode(&p_item_name->sz_ansi_name[0]);
			}
			else // 0x05
			{
				fullPath = _ansi2unicode(&p_item_name->sz_ansi_name2[0]);
			}

			// 指针跨越名称定义区
			p_tmp += size;

			_s_pack_item_info * p_info = (_s_pack_item_info *) p_tmp;

			// 偏移是从文件头开始的
			shared_ptr<CPackFileContentProvider> spContentProvider(new CPackFileContentProvider);
			spContentProvider->m_offset = p_info->offset + sizeof(_s_pack_header) + sizeof(_s_pack_list_header) + list_header.list_header_size;
			spContentProvider->m_seed = p_info->seed;
			spContentProvider->m_compress_size = p_info->compress_size;
			spContentProvider->m_decompress_size = p_info->decompress_size;
			spContentProvider->m_is_compressed = p_info->is_compressed;
			memcpy(spContentProvider->m_ft, p_info->ft, sizeof(FILETIME) * 5);
			spContentProvider->m_packFile = spFilePool;

			// 指针定位到下一项
			p_tmp += sizeof(_s_pack_item_info);

			// 需要把文件放入合适的容器中

			// 替换所有的\变成/
			replace(fullPath.begin(), fullPath.end(), '\\', '/');

			shared_ptr<CMabiFile> container = spRootFile;
			wstring::size_type pos = 0;
			wstring::size_type findPos = 0;
			while ((findPos = fullPath.find('/', pos)) != wstring::npos)
			{
				wstring segment = fullPath.substr(pos, findPos - pos);
				// 处理下连续 /  的情况
				container = static_pointer_cast<CMabiFile>(container->CreateFolder(segment));

				pos = fullPath.find_first_not_of('/', findPos);
			}

			wstring fileName = fullPath.substr(pos);
			file->SetName(fileName);
			file->SetContentProvider(spContentProvider);
			container->AddFile(file);
		}


		return spFileSystem;
	}
Example #6
0
bool KviPackageWriter::packInternal(const QString & szFileName, kvi_u32_t)
{

	KviFile f(szFileName);
	if(!f.open(QFile::WriteOnly | QFile::Truncate))
	{
		setLastError(__tr2qs("Can't open file for writing"));
		return false;
	}

	// write the PackageHeader
	// Magic
	char magic[4];
	magic[0] = 'K';
	magic[1] = 'V';
	magic[2] = 'P';
	magic[3] = 'F';
	if(f.write(magic, 4) != 4)
		return writeError();

	// Version
	kvi_u32_t uVersion = 0x1;
	if(!f.save(uVersion))
		return writeError();

	// Flags
	kvi_u32_t uFlags = 0x0;
	if(!f.save(uFlags))
		return writeError();

	// write PackageInfo
	// InfoFieldCount
	kvi_u32_t uCount = stringInfoFields()->count() + binaryInfoFields()->count();
	if(!f.save(uCount))
		return writeError();

	m_p->iCurrentProgress = 5;
	if(!updateProgress(m_p->iCurrentProgress, __tr2qs("Writing informational fields")))
		return false; // aborted

	// InfoFields (string)
	KviPointerHashTableIterator<QString, QString> it(*stringInfoFields());
	while(QString * s = it.current())
	{
		if(!f.save(it.currentKey()))
			return writeError();
		kvi_u32_t uType = KVI_PACKAGE_INFOFIELD_TYPE_STRING;
		if(!f.save(uType))
			return writeError();
		if(!f.save(*s))
			return writeError();
		++it;
	}

	// InfoFields (binary)
	KviPointerHashTableIterator<QString, QByteArray> it2(*binaryInfoFields());
	while(QByteArray * b = it2.current())
	{
		if(!f.save(it2.currentKey()))
			return writeError();
		kvi_u32_t uType = KVI_PACKAGE_INFOFIELD_TYPE_BINARYBUFFER;
		if(!f.save(uType))
			return writeError();
		if(!f.save(*b))
			return writeError();
		++it2;
	}

	m_p->iCurrentProgress = 10;
	if(!updateProgress(m_p->iCurrentProgress, __tr2qs("Writing package data")))
		return false; // aborted

	// write PackageData
	int iIdx = 0;
	for(KviPackageWriterDataField * pDataField = m_p->pDataFields->first(); pDataField; pDataField = m_p->pDataFields->next())
	{
		kvi_u32_t uKviPackageWriterDataFieldType = pDataField->m_uType;
		if(!f.save(uKviPackageWriterDataFieldType))
			return writeError();

		kvi_file_offset_t savedLenOffset = f.pos();
		// here we will store the length of the field once it's written
		if(!f.save(uKviPackageWriterDataFieldType))
			return writeError();

		m_p->iCurrentProgress = 10 + ((90 * iIdx) / m_p->pDataFields->count());

		switch(pDataField->m_uType)
		{
			case KVI_PACKAGE_DATAFIELD_TYPE_FILE:
				if(!packFile(&f, pDataField))
					return false;
				break;
			default:
				setLastError(__tr2qs("Internal error"));
				return false;
				break;
		}

		kvi_file_offset_t savedEndOffset = f.pos();
		f.seek(savedLenOffset);
		if(!f.save(pDataField->m_uWrittenFieldLength))
			return writeError();

		f.seek(savedEndOffset);
		iIdx++;
	}

	return true;
}